So löschen Sie ZIP-Dateien ohne Erweiterung in Linux in großen Mengen

So löschen Sie ZIP-Dateien ohne Erweiterung in Linux in großen Mengen

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 -bnoch --mime-typesind portable Optionen von file. Wenn Ihr filesie nicht unterstützt, prüfen Sie, was bare file path/to/some/zipdruckt. 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, grepwä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 grepan das an, was Sie fileausdrucken.

  • find-shwird hier erklärt:Was ist das zweite sh in sh -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").

verwandte Informationen