Ich habe einen Ordner voller unterschiedlicher Dateien, aber ohne Erweiterung. Wie kann ich alle Dateien löschen, die ZIP-Dateien sind?
Antwort1
In meinem Kubuntu der folgende Befehl:
file -b --mime-type path/to/some/zip
kehrt zurück:
application/zip
Damit kann ich alle Zip-Dateien im aktuellen Verzeichnis (mit Unterverzeichnissen) erkennen. Der Befehl lautet:
find . -type f -exec sh -c '
for f do
file -b --mime-type "$f" | grep -q "^application/zip$" && {
printf "%s\n" "$f"
# rm "$f"
}
done
' find-sh {} +
Wenn das Ergebnis vernünftig erscheint, heben Sie die Kommentierung auf rm "$f"
(löschen #
), um die Dateien tatsächlich zu entfernen.
Anmerkungen:
Weder
-b
noch--mime-type
sind portable Optionen vonfile
. Wenn Ihrfile
sie nicht unterstützt, prüfen Sie, was barefile path/to/some/zip
druckt. Es kann sein:path/to/some/zip: Zip archive data, …
Wobei
…
zusätzliche Informationen bezeichnet werden. Wenn ich mich auf diese Ausgabe verlassen müsste,grep
wäre mein Befehl:grep -q ": Zip archive data"
aber es würde (möglicherweise) fälschlicherweise Dateien mit genau dieser Zeichenfolge im Namen erkennen. Passen Sie Ihre jedenfalls
grep
an das an, was Siefile
ausdrucken.find-sh
wird hier erklärt:Was ist das zweite sh insh -c 'some shell code' sh
?Der Befehl kümmert sich nicht um Dateinamen (unter Linux ist das, was Sie "Erweiterung" nennen, nur ein Teil des Dateinamens). Es beantwortet die Frage, die Sie im Text des Beitrags gestellt haben ("Wie kann ich alle Dateien löschen, die Zip-Dateien sind?"), nicht den Titel ("Wie lösche ich mehrere Zip-Dateien gleichzeitig?"ohne Verlängerung").