Normalerweise lösche ich die Archivierung von Dingen, $ mkdir newFolder; $ mv *.zip newFolder; $ cd newFolder; $unzip *.zip
aber manchmal werde ich faul und mache es einfach in einem beliebigen Ordner, $ unzip *.zip
damit ich von Zeit zu Zeit mit anderen Inhalten durcheinander komme . Ich werde hier einige Methoden auflisten - einige Archivversionen haben sicherlich beschissene Flaggen, während andere spartanischer sind, ich interessiere mich mehr für letztere.
Einige Wege, um die Archivierung aufzuheben, gibt es andere?
$ find . -anewer fileThatExistedBeforeUnarchieving -ok rm '{}' \;
Schwächen sind, dass es die Verzeichnisse*.zip
auflistet, so dass Sie langsam-ok
, langsam mit vielen*.zip
Übereinstimmungen verwenden müssen und aus irgendeinem Grund nicht alles zu finden scheint, was extrahiert wurde.Wenn kleine Menge von extrahierten Dateien, eins nach dem anderen, langsam, umständlich und fehleranfällig.
Wenn ich sicherstellen will, dass der Inhalt des Archivs tatsächlich ein Ordner ist, überprüfe ich ihn manchmal mit
$ unzip -l *.bsd
, zumindest in obsds Entpack-Version.
Wenn Sie sich auf bestimmte Archivierungswerkzeuge beziehen, geben Sie diese gegebenenfalls an. Halten Sie es einfach - ich bin mehr an den Möglichkeiten interessiert, wie Sie es tun, als an einem einzigen Tool.
quelle
mkdir; unzip
Zeug automatisiere, damit ich nie zu faul bin, es zu tun! svn.mikelward.com/svn/scripts/untarAntworten:
Namentlich
Sie können die Liste der Dateien im Archiv generieren und löschen, was bei Archiven wie unzip oder 7z, die keine Option zum Generieren einer einfachen Liste von Dateinamen haben, ärgerlich ist. Selbst mit tar wird davon ausgegangen, dass die Dateinamen keine Zeilenumbrüche enthalten.
Anstatt die Dateien zu entfernen, können Sie sie an den gewünschten Ort verschieben.
FUSE verwenden
Anstatt von externen Tools abhängig zu sein, können Sie (bei den meisten Unices) FUSE verwenden , um Archive mit normalen Dateisystembefehlen zu bearbeiten.
Sie können Fuse-zip verwenden, um einen Blick in ein Zip zu werfen, es mit zu extrahieren
cp
, seinen Inhalt mit aufzulistenfind
usw.AVFS erstellt eine Ansicht Ihrer gesamten Verzeichnishierarchie, in der allen Archiven ein Verzeichnis zugeordnet ist (derselbe Name mit # am Ende), das den Archivinhalt zu enthalten scheint.
Nach Datum
Angenommen, es gibt keine anderen Aktivitäten in derselben Hierarchie als Ihre Extraktion, können Sie die extrahierten Dateien anhand ihrer letzten C-Zeit ermitteln . Wenn Sie die ZIP-Datei gerade erstellt oder verschoben haben, können Sie sie als Cutoff verwenden. Andernfalls verwenden Sie
ls -lctr
, um eine geeignete Abschaltzeit zu bestimmen. Wenn Sie sicherstellen möchten, dass die Reißverschlüsse nicht entfernt werden, gibt es keinen Grund für eine manuelle Genehmigung: Sie können siefind
durchaus ausschließen. Hier sind Beispielbefehle mit zsh oderfind
; Beachten Sie, dass die-cmin
und-cnewer
-Primäre nicht in POSIX, sondern unter Linux (und anderen Systemen mit GNU find), * BSD und OSX vorhanden sind.Mit GNU find, FreeBSD und OSX können Sie die Cutoff-Zeit auch festlegen, indem Sie eine Datei erstellen und
touch
deren mtime auf die Cutoff-Zeit setzen.Anstatt die Dateien zu entfernen, können Sie sie an den gewünschten Ort verschieben. Hier ist ein Weg mit GNU / * BSD / OSX zu finden, Verzeichnisse im Ziel zu erstellen, wie benötigt.
Zsh-Äquivalent (fast: dieses gibt die gesamte Verzeichnishierarchie wieder, nicht nur die Verzeichnisse, die Dateien enthalten):
Achtung, ich habe die meisten Befehle in dieser Antwort nicht getestet. Überprüfen Sie immer die Liste der Dateien, bevor Sie sie entfernen (
echo
zuerst ausführen , dann,rm
wenn es in Ordnung ist).quelle
Ich fühle mich sowieso dumm, ich habe mir am Kopf gekratzt, um dieses Skript zu schreiben, als ich ein ähnliches Problem hatte. Ich habe
cpio
mit der-it
Flagge eine Liste der Dateien abgerufen. Sie können gleichwertige Befehle für andere Archivierer verwenden. Der knifflige Teil ist, dass das cpio-Archiv von einem initrd stammt, in das ich extrahiert habe/
, sodass viele Ordner und Dateien denselben Namen haben wie in einem funktionierenden System. Zum Glück hat cpio keine meiner vorhandenen Dateien überschrieben. Ich benutze eine Zeitüberprüfung, um sicherzustellen, dass nichts gelöscht wird, was vor dem falschen Befehl vorhanden war.quelle
Wie wäre es, die Liste der Dateien im Archiv zu füttern
xargs rm
?Das wäre
tar -tf tarbomb.tar | xargs rm
oderunzip --list zipbomb.zip | xargs rm
.quelle
xargs
erwartet, dass seine Eingabe in einer eigenartigen Weise zitiert wird,find
die nicht produziert. Verwenden Siexargs -I rm {}
diese Option, damit xargs stattdessen ein Element pro Zeile verarbeitet. Welche Implementierung haben Sie für den Befehl unzip? Meins (Debian / Ubuntu) hat nicht--list
nur-l
, und es druckt nicht nur Dateinamen, so dass zusätzliche Verarbeitung erforderlich ist.find
. 3) Sie haben Rechtunzip
, ich habe nicht getestet und es scheint keine Option für eine nicht dekorierte Auflistung zu geben. Nein auch--list
auf meinem Ubuntu - ich habe es nur nicht getestet.tar -t
fürfind
. Aber meine anderen Punkte stehen. Es besteht die reale Gefahr, dass durch Ihren Befehl eine nicht verwandte Datei gelöscht wird.tar -tf tarbomb.tar
Gibt einen Dateinamen pro Zeile aus, so dass Sie dies tun könnentar -tf tarbomb.tar | while IFS=$'\n' read -r filename; do rm "$filename"; done
.Nicht wirklich das, wonach Sie gefragt haben, aber wie wäre es, stattdessen ein Skript zum Entpacken aller Dateien zu verwenden?
Auf diese Weise gelangt die Ausgabe jeder Datei in ein eigenes Verzeichnis.
quelle
Ich benutze die folgende Funktion in zsh:
Dh Befehlsersetzung, um alle Dateien in der bereinigten Ausgabe von zu entfernen
unzip -l
.tar tvf
könnte in ähnlicher Weise verwendet werden.quelle