![Zippen unter Beibehaltung relativer Verzeichnisse von überall](https://rvso.com/image/1554892/Zippen%20unter%20Beibehaltung%20relativer%20Verzeichnisse%20von%20%C3%BCberall.png)
Ich versuche, eine bestimmte Funktionalität zu erhalten zip
. Ich möchte alles rekursiv in ein bestimmtes Verzeichnis komprimieren und die Verzeichnisstruktur NUR aus diesem Verzeichnis beibehalten, aber den vollqualifizierten Pfad nicht als Teil des Archivs haben.
Nehmen wir an, ich habe das /path/to/test/tmp/
und möchte, dass alles darin tmp/
so komprimiert wird, als würde ich den Befehl aus diesem Ordner heraus ausführen.
Das -r
Flag liefert das gewünschte Ergebnis, enthält aber, je nachdem, wo ich es ausführe, Pfadinformationen über dem benötigten Verzeichnis:
user@MBP:~/path/to/test$ zip -r myarchive.zip tmp/
adding: tmp/foo.txt (deflated 68%)
adding: tmp/bar/bar.txt (deflated 41%)
adding: tmp/baz/baz/baz.txt (deflated 92%)
Das -j
Flag schneidet alles außer den Dateinamen ab:
user@MBP:~/path/to/test$ zip -rj myarchive.zip tmp/
adding: foo.txt (deflated 68%)
adding: bar.txt (deflated 41%)
adding: baz.txt (deflated 92%)
Ich brauche etwas, das mir Folgendes bietet:
adding: foo.txt (deflated 68%)
adding: bar/bar.txt (deflated 41%)
adding: baz/baz/baz.txt (deflated 92%)
Aber ich kann angeben, dass es von überall ausgeführt werden soll. Ich versuche, dies in einen Cron zu skripten. Ich kann nicht finden, wonach ich suche in dermanpage. Wie kann ich das bewerkstelligen, ohne in meinem Skript tatsächlich die Verzeichnisse zu ändern?
Antwort1
Es sieht so aus, als zip
ob dies (zumindest die Version von Info-ZIP, die auf meiner Plattform läuft) nicht möglich ist. (Im Gegensatz zu , das die Option / tar
hat , wie @Xen2050 angedeutet hat.)-C
--directory
Aber ich muss fragen, ist es so schlimm, Verzeichnisse in Ihrem Skript zu ändern? Insbesondere, wenn Sie dies in einer Subshell tun können und das aktuelle Arbeitsverzeichnis des Skripts nicht beeinflussen (detailliert erklärtin dieser SO-Antwort):
pwd
(cd /path/to/test/tmp; zip -r myarchive.zip .)
pwd # prints the same as in line 1
Beachten Sie, dass dadurch die endgültige Zip-Datei im Format . gespeichert wird /path/to/test/tmp
.