Ich hatte viel Glück mit
find . -name "*.php" -exec grep -Pl "\r" {} \;
Wie wäre es mit:
find . -name "*.php" | xargs file | grep "CRLF"
Ich glaube nicht, dass es zuverlässig ist, ^M
zu verwenden um zu versuchen, die Dateien zu finden.
Ich bin mir nicht sicher, was Sie genau mit "nicht zuverlässig" meinen, aber versuchen Sie es vielleicht:
find . -name '*.php' -print0 | xargs -0 grep -l '^M$'
Dies verwendet die grausame-Dateinamen-mit-Leerzeichen-in-ihnen-freundlicheren Optionen und findet Wagenrückläufe nur unmittelbar vor dem Zeilenende.
Denken Sie daran, dass die ^M
ist ein einzelnes CTRL M Zeichen, nicht zwei Zeichen.
Und auch, dass es Dateien auflistet, wo sogar eine line befindet sich im DOS-Modus, was Sie wahrscheinlich sowieso wollen, da diese UNIX-Dateien von einem Nicht-UNIX-Editor verstümmelt worden wären.
Basierend auf Ihrem Update meldet vim Ihre Dateien im DOS-Format:
Wenn vim ist Melden Sie es als DOS-Format, dann alle Zeile endet mit CRLF
. So funktioniert vim. Wenn auch nur eins Zeile hat nicht CR
, dann wird es als UNIX-Format betrachtet und der ^M
Zeichen sind im Puffer sichtbar. Wenn alles im DOS-Format ist, wird ^M
Zeichen werden nicht angezeigt:
Vim sucht sowohl nach dos- als auch nach unix-Zeilenenden, aber Vim hat eine eingebaute Präferenz für das Unix-Format.
- Wenn alle Zeilen in der Datei mit CRLF enden, wird das dos-Dateiformat angewendet, was bedeutet, dass jedes CRLF entfernt wird, wenn die Zeilen in einen Puffer eingelesen werden, und die Puffer-'ff'-Option ist dos.
- Wenn eine oder mehrere Zeilen nur mit LF enden, wird das Unix-Dateiformat angewendet, was bedeutet, dass jedes LF entfernt wird (aber jedes CR wird im Puffer vorhanden sein und als ^M angezeigt), und der Puffer 'ff' Option wird Unix sein.
Wenn Sie wirklich wissen wollen, was in der Datei steht, verlassen Sie sich nicht auf ein zu schlaues Tool wie vim :-)
Verwendung:
od -xcb input_file_name | less
und überprüfen Sie die Zeilenenden selbst.