Muszę przekonwertować cały katalog za pomocą dos2unix
. Nie jestem w stanie wymyślić, jak to zrobić.
333
find . -type f -print0 | xargs -0 dos2unix
Rekurencyjnie znajdzie wszystkie pliki w bieżącym katalogu i wezwie te pliki do polecenia dos2unix
find . -type f -print0 | xargs -0 dos2unix
rozwiązałbym problem, tak myślę.\;; echo Hello
find
wywołanie nie wykonuje tej kontroli (chociaż byłoby to wystarczająco proste, aby dodać), ale nowoczesnedos2unix
poprawnie pomija pliki binarne.Jeśli jest to duży katalog, możesz rozważyć uruchomienie go z wieloma procesorami:
Spowoduje to przekazanie 1 pliku na raz i wykorzystanie 4 procesorów.
źródło
n
o rząd wielkości lub dwa (w zależności od liczby plików, o których tu mówimy)Poniewaz dos2unix bardzo mnie nie usatysfakcjonowal, uruchomilem wlasne proste narzędzie. Oprócz kilku zalet szybkości i przewidywalności, składnia jest również nieco prostsza:
A jeśli chcesz, aby zszedł do podkatalogów (pomijając ukryte katalogi i pliki nietekstowe):
endlines
jest dostępny tutaj https://github.com/mdolidon/endlinesźródło
dos2unix
? Naprawdę ciekawy.dos2unix
, o różnych możliwościach (niektóre na przykład czytają UTF32, a inne nie; linie końcowe nie.) Jest tylko jednaendlines
, której możliwości są dobrze znane. 2 / liberalny na wejściu, nie wszyscydos2unix
są. 3 / wydajna eksploracja drzewa plików, zaprojektowana tak, aby była szybka i praktyczna w przypadku dziesiątek tysięcy plików. 4 / wychodzi z pudełka na OSX - co jest mniej ważne teraz, gdy istnieje pakiet Brew.Prawdopodobnie najlepiej pominąć ukryte pliki i foldery, takie jak
.git.
So, zamiast używaćfind
, jeśli Twojabash
wersja jest wystarczająco aktualna lub jeśli używaszzsh
, po prostu wykonaj:Pamiętaj, że w przypadku Bash będzie to wymagało:
.... ale jest to na tyle użyteczna funkcja, że i tak powinieneś ją po prostu włożyć
.bashrc
.Jeśli nie chcesz pomijać ukrytych plików i folderów, ale nadal nie chcesz zadzierać
find
(i nie winiłbym cię), możesz podać drugi argument glob rekurencyjny, aby dopasować tylko ukryte wpisy:Zauważ, że w obu przypadkach glob rozszerzy się o katalogi, więc zobaczysz następujące ostrzeżenie (potencjalnie wiele razy):
Skipping <dir>, not a regular file.
źródło
dos2unix
alias, który wpływa na sposób rozszerzania argumentów. Jaka jest wydajnośćtype dos2unix
Twojego systemu?**
zamiastfind
jest „skip ukryte pliki i foldery, takie jak.git
”.dos2unix
nigdy nie widzi ukrytych plików, ponieważ**
nie rozwija się, aby je pokazać. Jeśli chcesz automatycznie uruchamiaćdos2unix
ukryte pliki i foldery, możesz użyćfind
lubdos2unix ** **/.*
The**/.*
rozwinie tylko ukryte pliki i foldery, w tym.
(katalog główny),..
( katalog macierzysty) i wszelkie inne ukryte wpisy w bieżącym folderze.dos2unix
po prostu drukujeSkipping <dir>, not a regular file.
po uruchomieniu w katalogu, więc działa..
i.
jest bezpieczny.) Dodatkowo, połączeniels
z glob nie jest dobrym sposobem na sprawdzenie, jak glob jest rozwijany; użyjecho
zamiast tego:echo **
wypisuje argumenty, któredos2unix
otrzymujedos2unix **
.**
, co to sugeruje, a używanieecho
wyjaśnia.Typowym przykładem użycia wydaje się być standaryzacja zakończeń linii dla wszystkich plików zapisanych w repozytorium Git :
Należy pamiętać, że niektóre pliki (np
*.sln
,*.bat
) etc są wyłącznie używane w systemach operacyjnych Windows i powinien zachowaćCRLF
kończąc:W razie potrzeby użyj
.gitattributes
źródło
Każdy użytkownik systemu Solaris (korzystam z wersji 5.10, może dotyczyć także nowszych wersji, a także innych systemów unix):
dos2unix domyślnie nie zastępuje pliku, po prostu wydrukuje zaktualizowaną wersję na standardowe wyjście, więc będziesz musiał podać źródło i cel, tj. dwukrotnie tę samą nazwę:
źródło
źródło
Miałem ten sam problem i dzięki postom tutaj go rozwiązałem. Wiedziałem, że mam około stu plików i musiałem go uruchomić tylko dla plików * .js.
find . -type f -name '*.js' -print0 | xargs -0 dos2unix
Dziękuję wszystkim za pomoc.
źródło
Myślę, że najprostszym sposobem jest:
źródło
Googlowałem to milion razy, więc moim rozwiązaniem jest po prostu umieszczenie tej funkcji bash w twoim środowisku.
.bashrc
lub.profile
cokolwiekStosowanie
$ dos2unixd ./somepath
W ten sposób nadal masz oryginalne polecenie
dos2unix
i łatwo je zapamiętaćdos2unixd
.źródło
Jeśli nie ma podkatalogu, możesz również wziąć
źródło
dos2unix *
jest to prostsze i faktycznie będzie bardziej niezawodne. (Generalnie nie jest zalecane przesyłanie danych wyjściowychls
, ponieważ jest to narzędzie do formatowania i*
jest bardziej niezawodne w programowym użyciu).ls
nie jest dobre