2016-03-25 8 views
1
rekursiv löschen

Ich möchte rekursiv alle Binärdateien in einem Ordner unter Linux mit der Befehlszeile oder einem Bash-Skript löschen. Ich fandAlle Binärdateien im Ordner

grep -r -m 1 "^" path/to/folder | grep "^Binary file" 

alle binären Dateien in path/to/folder bei How to list all binary file extensions within a directory tree? aufzulisten. Ich möchte jetzt alle diese Dateien löschen. ich tun kann

grep -r -m 1 "^" path/to/folder | grep "^Binary file" | xargs rm 

aber das ist eher faul, wie es auch die Dateien ‚Binary‘ zu löschen versucht, ‚Datei‘ und ‚Matches‘, wie in

rm: cannot remove ‘Binary’: No such file or directory 
rm: cannot remove ‘file’: No such file or directory 
rm: cannot remove ‘matches’: No such file or directory 

Die Frage ist, also Wie lösche ich diese Dateien korrekt?

+0

Das ist eine schlechte Definition von "Binärdateien" zu beginnen. Unabhängig davon - ich schlage vor, Sie über [Word Splitting] (http://mywiki.wooled.org/WordSplitting) zu lesen. Ich bin mir ziemlich sicher, dass Sie schnell die Ursache Ihres Problems verstehen werden. –

+0

Das funktioniert tatsächlich, danke! Ich stimme zu, dass diese Definition von "Binärdatei" nicht sehr gut ist (siehe die Antwort unten von vesche und seiner Diskussion), aber es erfasst genau die Dateien, die ich im gegebenen Anwendungsfall löschen wollte. – Christian

+0

Ich bin froh zu hören, dass es für dich funktioniert hat :-) –

Antwort

1

Dieser Befehl gibt alle binären ausführbaren Dateien rekursiv innerhalb eines Verzeichnisses zurück. Führen Sie dies zuerst aus, um eine korrekte Ausgabe sicherzustellen.

find . -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print 

Wenn das funktioniert, können Sie die Ausgabe an xargs übergeben, um diese Dateien zu löschen.

find . -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print | xargs rm -f 

Hoffen Sie, dass dies geholfen hat, haben Sie einen tollen Tag! :)

+0

Vielen Dank für deine Antwort! Ich habe auch diesen Befehl gefunden - das Problem ist, dass dieser Befehl die kompilierten Dateien, die ich löschen möchte, nicht richtig findet: Der 'grep' Befehl findet etwa 50 Dateien wie' ./src/polynom.o' während des von Ihnen vorgeschlagenen Befehls findet nur eine einzelne Datei (die auch mit 'grep' gefunden wird). – Christian

+0

Ah, mein Fehler, ich nahm an, du beziehst dich auf binäre ausführbare Dateien, versuche das: 'finde. -type f -exec sh -c "Datei -i '{}' | grep -q 'Zeichensatz = Binär'" \; -print " – vesche

+0

Hm, das könnte ein Fehler des tar'ed-Programms sein, den ich mir ansehe, aber dieser Befehl listet auch mehrere rohe c-Dateien auf, wie'./pkg/meataxe/src/zgauss.c', und das mache ich sicher nicht wollen diese löschen ... – Christian