Jak zastosować rekursywnie dos2unix do całej zawartości folderu?

11

Czy istnieje sposób zastosowania dos2unixpolecenia, aby działało na wszystkich plikach w folderze i jego podfolderach? man dos2unixnie pokazuje żadnych -rlub podobnych opcji, które mogłyby to ułatwić?

Alex Kinman
źródło

Odpowiedzi:

18

find /path -type f -print0 | xargs -0 dos2unix --

Stefan Paletta
źródło
2
Nie martw się, dos2unixdomyślnie pomija pliki binarne.
Walf
3

Pomijanie plików binarnych i ukrytych plików było dla mnie ważne:

Ten działał dla mnie dobrze:

find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k

Co przekłada się na: znajdowanie rekursywnie wszystkich nie ukrytych plików w bieżącym katalogu, a następnie za pomocą grep, wyświetlenie listy wszystkich niepustych (-I) niepustych plików, a następnie potokowanie go do xargs (rozdzielonych znakami nowej linii) po jednym pliku, aby dos2unix i zachowaj oryginalny znacznik czasu.

Zobacz też:

https://github.com/mdolidon/endlines

phyatt
źródło
2

Za pomocą polecenia find można znaleźć wszystkie pliki w strukturze katalogów, które chcesz uruchomić za pomocą polecenia dos2unix

find /path/to/the/files -type f -exec dos2unix {} \;

Spójrz na strony podręcznika dla find, istnieje wiele opcji, których możesz użyć, aby określić, co zostanie ocenione

JayJay
źródło
To nie zadziałało.
Alex Kinman
2
Zachowaj BARDZO ostrożność, uruchamiając to, jeśli gdziekolwiek w drzewie plików jest katalog .git ... to uszkodziło moje lokalne repozytorium git.
Aaron_H
1

Użyj znaku wieloznacznego. W ten sposób: (jeśli jesteś w folderze)

dos2unix *

lub jeśli jesteś poza folderem:

dos2unix /path/to/folder/*
Wyświetlana nazwa
źródło
1

Używanie bash:

shopt -s globstar
dos2unix **

Opcja globstarpowłoki bashumożliwia użycie **globu. Działa to tak samo, *ale pasuje /do nazw ścieżek (stąd też dopasowuje nazwy w podkatalogach). To działałoby w katalogu zawierającym umiarkowaną liczbę plików w jego podkatalogach (niewiele tysięcy).

W zshi yashmuszli (z set -o extended-glob, w yash), zrobiłbyś

dos2unix **/*
Kusalananda
źródło