Elegante Möglichkeit, mit BOM nach UTF-8-Dateien zu suchen?

Lesezeit: 4 Minuten

Elegante Moglichkeit mit BOM nach UTF 8 Dateien zu suchen
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:

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 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?

Elegante Moglichkeit mit BOM nach UTF 8 Dateien zu suchen
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

1646242447 963 Elegante Moglichkeit mit BOM nach UTF 8 Dateien zu suchen
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.

    – Legolas

    8. September 2015 um 13:26 Uhr

find . -type f -print0 | xargs -0r awk '
    /^\xEF\xBB\xBF/ {print FILENAME}
    {nextfile}'

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

1646242447 741 Elegante Moglichkeit mit BOM nach UTF 8 Dateien zu suchen
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:

grep -rl $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'

  • Dieser hat bei mir funktioniert, die akzeptierte Antwort nicht (ich bin auf einem Mac)

    – mjsarfatti

    31. März 2016 um 15:18 Uhr

Elegante Moglichkeit mit BOM nach UTF 8 Dateien zu suchen
Markus Griep

Ich würde so etwas verwenden:

grep -orHbm1 "^`echo -ne '\xef\xbb\xbf'`" . | sed '/:0:/!d;s/:0:.*//'

Dadurch wird sichergestellt, dass die Stückliste ab dem ersten Byte der Datei auftritt.

  • Dieser hat bei mir funktioniert, die akzeptierte Antwort nicht (ich bin auf einem Mac)

    – mjsarfatti

    31. März 2016 um 15:18 Uhr

1646242448 483 Elegante Moglichkeit mit BOM nach UTF 8 Dateien zu suchen
Peter Mortensen

Für einen Windows-Benutzer siehe Das (Gutes PHP-Skript zum Auffinden der BOM in Ihrem Projekt).

  • Die verlinkte Website zeigt: “Website offline, keine Cache-Version verfügbar”.

    – Vog

    9. Januar 2012 um 12:57 Uhr


  • Dasselbe Skript ist auch in Github verfügbar: github.com/emrahgunduz/BomCleaner

    – emrahgunduz

    16. April 2013 um 15:26 Uhr

  • Danke Kumpel, deine Antwort hat mir den Tag gerettet.

    – Krunal Panchal

    21. September 2015 um 8:09 Uhr

  • Und ein Stücklistenfinder: github.com/svn2github/wikia/blob/master/extensions/FCKeditor/… (falls jemand die ‘automatische’ Bereinigung nicht mag oder einfach nur die Dateien mit BOM finden möchte)

    – Meloniq

    18. Mai 2016 um 16:43 Uhr

914470cookie-checkElegante Möglichkeit, mit BOM nach UTF-8-Dateien zu suchen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy