Elegante Möglichkeit, mit BOM nach UTF-8-Dateien zu suchen?
Lesezeit: 4 Minuten
Vog
Zu Debugging-Zwecken muss ich ein Verzeichnis rekursiv nach allen Dateien durchsuchen, die mit einer UTF-8-Byte-Order-Marke (BOM) beginnen. 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 kurze, unlesbare Einzeiler bevorzugen:
Es funktioniert nicht mit Dateinamen, die einen Zeilenumbruch enthalten, aber solche Dateien sind ohnehin nicht zu erwarten.
Gibt es eine kürzere oder elegantere Lösung?
Gibt es interessante Texteditoren oder Makros für Texteditoren?
Dennis
Was ist mit diesem einen einfachen Befehl, der die böse Stückliste nicht nur findet, sondern löscht? 🙂
find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i {} \;
Ich liebe “finden” 🙂
Warnung Das obige wird ändern Binärdateien, die diese drei Zeichen enthalten.
Wenn Sie nur BOM-Dateien anzeigen möchten, verwenden Sie diese:
grep -rl $'\xEF\xBB\xBF' .
Erkennt fälschlicherweise PDF mit einer BOM-Markierung. Das liegt daran, dass das gesamte Dokument durchsucht wird, nicht nur die erste Zeile
– Olivier Refalo
23. September 2011 um 14:38 Uhr
Oder mit ack: “ack ‘\xEF\xBB\xBF'”
– Schlank
17. März 2012 um 1:46 Uhr
Ändern Sie den Befehl sed, um eine 1 vor dem führenden ‘s’ einzufügen, sodass dies nur für die erste Zeile gilt
– Ben Combee
6. Juni 2012 um 4:07 Uhr
Verwenden grep -rlI $'\xEF\xBB\xBF' . Binärdateien zu ignorieren.
– Bernhard
5. November 2012 um 20:07 Uhr
Erkennt und modifiziert JPG und andere Binärdateien, wie bereits gesagt.
– Jehy
28. Januar 2014 um 10:38 Uhr
Jan Przybylo
Der beste und einfachste Weg, dies unter Windows zu tun:
Totaler Kommandant → gehe zum Stammverzeichnis des Projekts → finde Dateien (Alt + F7) → Dateitypen *.* → Text „EF BB BF“ suchen → Kontrollkästchen „Hex“ aktivieren → Suchen
Und du bekommst die Liste 🙂
Schön, besonders die Verwendung meines langjährigen Lieblings-Total-Commanders, aber leider leidet dieser unter dem gleichen Problem wie viele andere: Es durchsucht alle Bytes in einer Datei, so viele Bilder usw. werden gemeldet. Dies kann leicht verbessert werden, indem Sie RegEx anstelle von Hex verwenden und nach “^\xEF\xBB\xBF” suchen, wodurch viele Bilder entfernt werden, aber immer noch Dateien vorhanden sind, die die Stückliste auf halbem Weg durch die Datei haben (obwohl es nur wenige geben sollte) und natürlich Alle Binärdateien, die zufällig einen ASCII-Zeilenumbruch direkt vor der Stückliste haben. Trotzdem waren bei meiner Testsuche alle Bilder weg.
Die meisten der oben angegebenen Lösungen testen mehr als die erste Zeile der Datei, auch wenn einige (wie die Lösung von Marcus) die Ergebnisse dann filtern. Diese Lösung testet nur die erste Zeile jeder Datei, daher sollte es etwas schneller sein.
Got arbeitet mit Folgendem unter Linux (RHEL6) – find . -type f -print0 | xargs -0 awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
– Olivier Refalo
23. September 2011 um 14:37 Uhr
Wie muss ich Ihren Code ändern, um diese Dateien zu reparieren, nachdem sie gefunden wurden?
– Schwarz
5. August 2019 um 9:55 Uhr
CesarB
Wenn Sie einige Fehlalarme akzeptieren (falls es keine Textdateien gibt oder in dem unwahrscheinlichen Fall, dass sich ein ZWNBSP mitten in einer Datei befindet), können Sie grep verwenden:
fgrep -rl `echo -ne '\xef\xbb\xbf'` .
Sie können verwenden grep um sie zu finden und Perl, um sie wie folgt zu entfernen: