Elegante Möglichkeit, nach UTF-8-Dateien mit Stückliste zu suchen?
Für debugging-Zwecke, die ich brauche, um rekursiv suchen Sie ein Verzeichnis für alle Dateien, die beginnen mit einem UTF-8 BOM (byte order mark). Meine aktuelle Lösung ist ein einfaches shell-Skript:
find -type f |
while read file
do
if [ "`head -c 3 -- "$file"`" == $'\xef\xbb\xbf' ]
then
echo "found BOM in: $file"
fi
done
Oder, wenn Sie bevorzugen kurze, nicht lesbare Einzeiler:
find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done
Es funktioniert nicht mit Dateinamen, die enthalten einen Zeilenumbruch,
aber diese Dateien sind nicht zu erwarten sowieso.
Gibt es eine kürzere oder elegantere Lösung?
Gibt es irgendwelche interessanten text-Editoren und Makros für text-Editoren?
InformationsquelleAutor der Frage vog | 2008-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was über diese einen einfachen Befehl, der nicht nur feststellt, sondern "nullt" böse BOM? 🙂
Liebe ich "finde" 🙂
WarnungDie oben ändern Binär Dateien enthalten, die diese drei Zeichen.
.
Wenn Sie wollen einfach nur, um zu zeigen, BOM-Dateien, verwenden Sie diese:
InformationsquelleAutor der Antwort Denis
Die beste und einfachste Weg, um dies auf Windows:
Total Commander → gehen Sie zu Projekt-root-Verzeichnis → Dateien suchen (Alt + F7) → Datei-Typen *.* → Text suchen "EF BB BF" → Häkchen bei " Hex " → Suche
Und Sie erhalten die Liste 🙂
InformationsquelleAutor der Antwort Jan Przybylo
Meisten Lösungen, die oben angegebenen test mehr als die erste Zeile der Datei, auch wenn einige (wie Marcus die Lösung) dann die Ergebnisse filtern. Diese Lösung testet nur die erste Zeile von jeder Datei, so sollte es ein bisschen schneller.
InformationsquelleAutor der Antwort Aron Griffis
Wenn Sie akzeptieren, einige false-positives " (in Fall gibt es nicht-text-Dateien, oder in dem unwahrscheinlichen Fall, dass es ZWNBSP in der Mitte einer Datei), können Sie mit grep:
InformationsquelleAutor der Antwort CesarB
Ich würde so etwas wie:
Gewährleistet werden, dass das BOM tritt auf, beginnend beim ersten byte der Datei.
InformationsquelleAutor der Antwort Marcus Griep
Können Sie
grep
Sie zu finden und Perl, Streifen Sie aus wie so:InformationsquelleAutor der Antwort theory
Für einen Windows-Benutzer, finden Sie unter diese (gutes PHP-script für die Suche nach der
BOM
in Ihrem Projekt).InformationsquelleAutor der Antwort julien
Eine overkill-Lösung ist
phptags
(nicht dievi
tool mit dem gleichen Namen), das sieht speziell für PHP-Scripte:Wird die Ausgabe etwas wie:
Und die
--whitespace
- Modus automatisch beheben solche Probleme (rekursiv, aber behauptet, dass es nur umschreiben .die php-Skripte.)InformationsquelleAutor der Antwort mario
find -print0
bringt einen null \0 zwischen jedem Dateinamen statt mit neuen Linienxargs -0
erwartet null getrennt Argumente anstelle von der Linie getrenntgrep -l
listet die Dateien, die mit dem regex^\xeff\xbb\xbf
ist nicht ganz korrekt, denn es wird übereinstimmung nicht BOMed UTF-8-Dateien, wenn Sie die null-Breite Leerzeichen am Anfang einer ZeileInformationsquelleAutor der Antwort Jonathan Wright
Habe ich dieses korrigieren nur JavaScript-Dateien:
InformationsquelleAutor der Antwort Refineo
Wenn Sie auf der Suche für UTF-Dateien, die Datei Befehl funktioniert. Es wird Ihnen sagen, was die Codierung der Datei ist. Wenn es irgendwelche nicht-ASCII-Zeichen in es es kommen mit UTF.
Das wird nicht funktionieren, rekursiv, wenn. Sie können sich wahrscheinlich rig einige Phantasie-Befehl, um es rekursiv ist, aber ich habe gerade gesucht, jede Ebene individuell wie die folgenden, bis ich lief aus Ebenen.
InformationsquelleAutor der Antwort Mike Dotterer