Gibt es eine Möglichkeit, alle Dateien in einem bestimmten Verzeichnis mit dem Befehl zip
zu komprimieren? Ich habe gehört, dass man *.*
verwenden kann, aber ich möchte, dass es auch für Dateien ohne Erweiterung funktioniert.
Sie können einfach *
verwenden; es besteht keine Notwendigkeit für *.*
. Dateierweiterungen sind unter Unix nichts Besonderes. *
passt auf null oder mehr Zeichen - einschließlich eines Punktes. Es passt also auf foo.png
, weil das null oder mehr Zeichen sind (sieben, um genau zu sein).
Beachten Sie, dass *
standardmäßig nicht auf Dateien passt, die mit einem Punkt beginnen (und auch nicht auf *.*
). Das ist oft das, was Sie wollen. Falls nicht, wird es in der Bash mit shopt -s dotglob
gemacht (schließt aber immer noch .
und ..
aus). Andere Shells haben andere Möglichkeiten (oder gar keine), Punktdateien einzuschließen.
Alternativ hat zip
auch eine -r
(rekursive) Option, um ganze Verzeichnisbäume auf einmal zu bearbeiten (und sich nicht um das Punktdateiproblem kümmern zu müssen):
zip -r myfiles.zip mydir
wobei mydir
das Verzeichnis ist, das Ihre Dateien enthält. Beachten Sie, dass das erzeugte zip sowohl die Verzeichnisstruktur als auch die Dateien enthalten wird. Wie peterph in seinem Kommentar anmerkt, ist dies in der Regel eine gute Sache: Das Entpacken des Zip-Archivs speichert alle extrahierten Dateien in einem Unterverzeichnis.
Sie können zip auch anweisen, die Pfade nicht zu speichern, indem Sie die Option -j
/--junk-paths
verwenden.
Der Befehl zip
wird mit einer Dokumentation ausgeliefert, die Sie über alle seine (vielen) Optionen informiert; geben Sie man zip
ein, um diese Dokumentation zu sehen. Das gilt nicht nur für zip; Sie können die Dokumentation für die meisten Befehle auf diese Weise erhalten.
In meinem Fall wollte ich jede Datei in ein eigenes Archiv zippen, also habe ich folgendes getan (in zsh
):
$ for file in *; do zip ${file%.*}.zip $file; done
Eine andere Möglichkeit wäre die Verwendung von find und xargs: (dies könnte ein "." Verzeichnis in der Zip-Datei enthalten, aber es sollte trotzdem korrekt entpackt werden. Bei meinem Test hat zip den Punkt vor der Komprimierung entfernt)
find . -type f -exec zip zipfile.zip {} +
(Das +
kann durch \;
ersetzt werden, wenn Ihre Version von find
das +
Ende für exec nicht unterstützt. Es wird allerdings langsamer sein...)
Dies wird standardmäßig alle Unterverzeichnisse einschließen. Bei GNU find kann -maxdepth
dies verhindern.