Ich mag zip, es ist einfach, aber vor kurzem musste ich nur die Datei komprimieren, die einem Benutzer in einem Verzeichnis gehört.
Ich habe das Handbuch gelesen und kann keine Option finden, um beispielsweise Dinge zu tun wie:
zip /tmp/file.zip -own antoine -r /usr/something/*
Verpasse ich die Option oder ist sie möglicherweise mit einem anderen Archivstandardformat möglich? (Ich bin offen für Vorschläge, obwohl ich unter AIX arbeite und möglicherweise einige Optionen oder Binärdateien verpasse.)
find -user antoine
als Argumente zum Komprimieren verwenden.zip
Leider gibt es keine Option zum Lesen von NUL-getrennten Dateinamen und daher können Dateien mit Leerzeichen und Zeilenumbrüchen im Namen nicht sehr gut verarbeitet werden, wenn sie von einem anderen Befehl bereitgestellt werden. Alternativ können Sie ein Python-Skript schreiben, es verfügt über ein gutes Zip-Modul und spezielle Dateinamen können problemlos verarbeitet werden.Antworten:
Sie können versuchen, die relevanten Dateien zu finden mit
find
:Sie können dann verwenden
-exec
, um eine Zip-Datei aus den Ergebnissen vonfind
:Lassen Sie die maximale Tiefe weg, wenn Sie wiederkehren möchten.
quelle
-own
? : D sind Sie sicherposixy
zip
. Das POSIX-Äquivalent von-maxdepth 1
ist,\( -name . -o -prune \)
obwohl hier die Chancen stehen-mindepth 1 -maxdepth 1
, dass Sie wollen , das heißt! -name . -prune
.Mit
zsh
:um meine (regulären) Dateien zu komprimieren.
Antoines zu reißen
quelle
zsh
, es aber zufällig installiert haben (OS X stellt eine Kopie bereit), können Sie es verwendenzsh -c 'zip ...'
.Verwenden Sie nur Funktionen, die unter AIX oder anderen POSIX- und kaum mehr Systemen verfügbar sind:
find
rekursiv in Unterverzeichnisse. Um dies zu vermeiden,-prune
weist es an, nicht in die Verzeichnisse abzusteigen, auf die es stößt. Das ist nicht gut, wenn ich renne,find /usr/something -type d -prune -o …
weil dann/usr/something
übersprungen würde. Also führe ichfind
alle Einträge in diesem Verzeichnis aus, außer.
und..
.Eine einfachere Redewendung ist es, in das Verzeichnis zu wechseln und das Startverzeichnis
.
speziell zu behandeln. Hier würde es das resultierende Archiv ändern, das./foo
stattdessen Pfade der Form hätteusr/something/foo
. Diese Technik basiert auf der Tatsache, dass-name .
nur das Startverzeichnis übereinstimmt und jede andere angetroffene Datei ihren eigenen Namen hat.Beachten Sie, dass
zip
dies mehrmals ausgeführt werden kann, wenn die Liste der Dateinamen für einen einzelnen Aufruf zu lang ist. Dies ist in Ordnung, dazip -r
vorhandene Dateien im Archiv ersetzt werden. Wenn Sie einen anderen Archivierer verwenden, achten Sie darauf, ihn nicht in einem Modus aufzurufen, in dem ein neues Archiv erstellt wird (z. B. nicht verwendentar -c
).quelle
find /usr/something/. ! -name . -prune ...
Sie brauchen nichtcd
hinein oder die gesamte Dateiliste übergeben , umfind
Shell - Platzhalter verwenden.Wie wäre es mit
quelle