grep probabilmente non è lo strumento che desideri per questo. Stamperà una riga per ogni riga corrispondente in ogni file. A meno che tu non voglia, diciamo, eseguire todos 10 volte su un file di 10 righe, grep non è il modo migliore per farlo. L'uso di find per eseguire file su ogni file nell'albero, quindi passare attraverso quello per "CRLF" ti darà una riga di output per ogni file che ha terminazioni di riga in stile dos:
find . -not -type d -exec file "{}" ";" | grep CRLF
ti darà qualcosa come:
./1/dos1.txt: ASCII text, with CRLF line terminators
./2/dos2.txt: ASCII text, with CRLF line terminators
./dos.txt: ASCII text, with CRLF line terminators
Usa Ctrl +V , Ctrl +M per inserire un carattere letterale di ritorno a capo nella stringa grep. Quindi:
grep -IUr --color "^M"
funzionerà - se ^M
c'è una CR letterale che hai inserito come ti ho suggerito.
Se vuoi l'elenco dei file, devi aggiungere il -l
anche l'opzione.
Spiegazione
-I
ignora i file binari-U
impedisce a grep di eliminare i caratteri CR. Di default lo fa se decide che si tratta di un file di testo.-r
leggere tutti i file in ogni directory in modo ricorsivo.
Utilizzo di RipGrep:
rg -l \r
-l, --files-with-matches
Only print the paths with at least one match.
https://github.com/BurntSushi/ripgrep