Tuve buena suerte con
find . -name "*.php" -exec grep -Pl "\r" {} \;
¿Qué tal:
find . -name "*.php" | xargs file | grep "CRLF"
No creo que sea confiable intentar usar ^M
para tratar de encontrar los archivos.
No estoy seguro de lo que quiere decir exactamente con "no confiable", pero es posible que desee probar:
find . -name '*.php' -print0 | xargs -0 grep -l '^M$'
Esto usa el más atroz-nombres-de-archivo-con-espacios-en-ellos-amigable opciones y solo encuentra retornos de carro inmediatamente antes del final de la línea.
Tenga en cuenta que el ^M
es un único CTRL M carácter, no dos personajes.
Y también que mostrará una lista de archivos en los que incluso uno está en modo DOS, que es probablemente lo que desea de todos modos, ya que esos habrían sido archivos UNIX manipulados por un editor que no es UNIX.
Basado en su actualización de que vim está reportando sus archivos en formato DOS:
Si vim es informándolo como formato DOS, luego cada línea termina con CRLF
. Así es como funciona vim. Si incluso uno la línea no tiene CR
, entonces se considera formato UNIX y el ^M
los caracteres son visibles en el búfer. Si todo está en formato DOS, el ^M
los caracteres no se muestran:
Vim buscará terminaciones de línea tanto dos como unix, pero Vim tiene una preferencia incorporada por el formato unix.
- Si todas las líneas del archivo terminan en CRLF, se aplicará el formato de archivo dos, lo que significa que cada CRLF se eliminará al leer las líneas en un búfer, y la opción 'ff' del búfer será dos.
- Si una o más líneas terminan solo con LF, se aplicará el formato de archivo Unix, lo que significa que se eliminará cada LF (pero cada CR estará presente en el búfer y se mostrará como ^M), y el búfer 'ff' la opción será unix.
Si realmente quiere saber qué hay en el archivo, no confíe en una herramienta demasiado inteligente como vim :-)
Usar:
od -xcb input_file_name | less
y compruebe los finales de línea usted mismo.