
93578
07.12.2018, aktualisiert um 15:58:01 Uhr
Alle Zeilen mit non-ASCII Zeichen in allen Text-Dateien in mehreren Unterverzeichnissen löschen?
Haloo liebe Gemeinde,
und wieder mal habe ich ein Problem mit Linux.
Ich habe Folgendes Verzeichnisstruktur:
Hauptordner
- Unterordner 1
- Unterordner 2
- Unterordner 3
usw. (insgesamt ca. 1000 Untervezeichnisse)
Jedes Unterordner beihaltet ca. 100 txt-Dateien (von 100000 Zeilen bis 10000000 Zeilen).
Ich möchte gerne alle Zeilen , die non-ASCII Zeichen beihalten, in allen Dateien in diesen Unterordnern löschen.
Bis jetzt hatte ich folgende Hintergedanken:
Mir dem Befehl:
kann ich es in einer Datei machen.
Nun wie kann ich das für 100.000 Dateien realiseiren, ohne vorher alle Dateinamen fleißig im Bash aufschreiben (sie haben dazu auch noch kein einheitliches Muster für Dateinamen: 1.txt, new-150.txt, 1(2).txt, bond.txt usw.)?
und wieder mal habe ich ein Problem mit Linux.
Ich habe Folgendes Verzeichnisstruktur:
Hauptordner
- Unterordner 1
- Unterordner 2
- Unterordner 3
usw. (insgesamt ca. 1000 Untervezeichnisse)
Jedes Unterordner beihaltet ca. 100 txt-Dateien (von 100000 Zeilen bis 10000000 Zeilen).
Ich möchte gerne alle Zeilen , die non-ASCII Zeichen beihalten, in allen Dateien in diesen Unterordnern löschen.
Bis jetzt hatte ich folgende Hintergedanken:
Mir dem Befehl:
find Hauptordner -type f -exec grep -v -P '[\x00-\x08\x0E-\x1F\x80-\xFF]' Datei1.txt > tmp-Datei1.txt
mv Datei1.txt
kann ich es in einer Datei machen.
Nun wie kann ich das für 100.000 Dateien realiseiren, ohne vorher alle Dateinamen fleißig im Bash aufschreiben (sie haben dazu auch noch kein einheitliches Muster für Dateinamen: 1.txt, new-150.txt, 1(2).txt, bond.txt usw.)?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 395045
Url: https://administrator.de/forum/alle-zeilen-mit-non-ascii-zeichen-in-allen-text-dateien-in-mehreren-unterverzeichnissen-loeschen-395045.html
Ausgedruckt am: 05.05.2025 um 13:05 Uhr
6 Kommentare
Neuester Kommentar
Zitat von @93578:
Mir dem Befehl:
kann ich es in einer Datei machen.
Nun wie kann ich das für 100.000 Dateien realiseiren, ohne vorher alle Dateinamen fleißig im Bash aufschreiben (sie haben dazu auch noch kein einheitliches Muster für Dateinamen: 1.txt, new-150.txt, 1(2).txt, bond.txt usw.)?
Mir dem Befehl:
find Hauptordner -type f -exec grep -v -P '[\x00-\x08\x0E-\x1F\x80-\xFF]' Datei1.txt > tmp-Datei1.txt
> mv Datei1.txt
kann ich es in einer Datei machen.
Nun wie kann ich das für 100.000 Dateien realiseiren, ohne vorher alle Dateinamen fleißig im Bash aufschreiben (sie haben dazu auch noch kein einheitliches Muster für Dateinamen: 1.txt, new-150.txt, 1(2).txt, bond.txt usw.)?
Moin,
Du schreibst ein kleines Skript filter-die-datei.sh
#!bin/bash
grep -v -P '[\x00-\x08\x0E-\x1F\x80-\xFF]' $1 > S1.txt
mv $1.txt $1
und dann kannst du mit
find Hauptordner -type f -exec filter-die-datei.sh {} \;
die Datei filtern
lks
Zitat von @93578:
Frohe Weihnachten! 
Danke Dir auch.
Beachte bei dem Skript, daß es keinerlei Sicherheitvorkehrungen gegen manipulierte Dateipfade und -namen hat. Damit ist einer Code-Injection Tür und Tor geöffnet, wenn es in einer unkontrollierten Umgebung läuft und kein Parameter-Sanitation erfolgt.
Es ist halt einfach quick'n'dirty.
lks