ho avuto fortuna con
find . -name "*.php" -exec grep -Pl "\r" {} \;
Che ne dici di:
find . -name "*.php" | xargs file | grep "CRLF"
Non penso sia affidabile provare ad usare ^M
per cercare di trovare i file.
Non sei sicuro di cosa intendi esattamente per "non affidabile", ma potresti provare:
find . -name '*.php' -print0 | xargs -0 grep -l '^M$'
Questo usa il più atroce-nome-di-file-con-spazi-amichevole opzioni e trova solo i ritorni a capo immediatamente prima della fine della riga.
Tieni presente che il valore ^M
è un singolo CTRL M carattere, non due caratteri.
E inoltre che elencherà i file in cui anche uno line è in modalità DOS, che è probabilmente quello che vuoi comunque dato che quelli sarebbero stati file UNIX alterati da un editor non UNIX.
In base al tuo aggiornamento, vim riporta i tuoi file in formato DOS:
Se vim è segnalandolo come formato DOS, quindi ogni la riga termina con CRLF
. Questo è il modo in cui funziona Vim. Se anche uno la riga non ha CR
, quindi è considerato il formato UNIX e il ^M
i caratteri sono visibili nel buffer. Se è tutto in formato DOS, il ^M
i caratteri non vengono visualizzati:
Vim cercherà entrambi i finali di riga dos e unix, ma Vim ha una preferenza incorporata per il formato unix.
- Se tutte le righe nel file terminano con CRLF, verrà applicato il formato di file dos, il che significa che ogni CRLF viene rimosso durante la lettura delle righe in un buffer e l'opzione buffer 'ff' sarà dos.
- Se una o più righe terminano solo con LF, verrà applicato il formato di file unix, il che significa che ogni LF viene rimosso (ma ogni CR sarà presente nel buffer e verrà visualizzato come ^M) e il buffer 'ff' l'opzione sarà unix.
Se davvero vuoi sapere cosa c'è nel file, non fare affidamento su uno strumento troppo intelligente come vim :-)
Usa:
od -xcb input_file_name | less
e controlla tu stesso le terminazioni di riga.