Ich mache ein Shell-Skript, um einige Dateien zu packen. Ich zippe ein Verzeichnis wie dieses:
zip -r /Users/me/development/something/out.zip /Users/me/development/something/folder/
Das Problem ist, dass das resultierende Archiv out.zip den gesamten Dateipfad enthält. Das heißt, wenn es entpackt wird, enthält es den gesamten Pfad "/ Users / me / development / anotherthing /". Können diese tiefen Pfade vermieden werden, wenn ein Verzeichnis in ein Archiv gestellt wird?
Wenn ich zip aus dem Zielverzeichnis heraus starte, habe ich dieses Problem nicht.
zip -r out.zip ./folder/
In diesem Fall bekomme ich nicht den ganzen Müll. Das betreffende Skript wird jedoch von überall aufgerufen.
FWIW, ich verwende Bash unter Mac OS X 10.6.
$ pushd /some/path ; do-something ; popd
... oder sogar mit Subshells:$ ( cd /some/path ; do-something )
&&
anstelle von;
ist eine gute Idee, damit der andere Befehl nicht ausgeführt wird, wenn dascd
fehlschlägt (Tippfehler oder anderes Problem):(cd /some/path && do-something)
zip -j
?Ja. Verwenden Sie die
-j
Option mitzip
.-j
ist "Junk the Path". Laut der Manpage auf zip :Verwenden
-j
bedeutet den folgenden Befehl:Erstellt ein Archiv, das wie folgt aussieht:
quelle
Es gibt
pushd
undpopd
und$OLDPWD
. Angenommen, das$PWD
ist zu/Users/me/development
tun:Nun
$PWD
ist der wieder da/Users/me/development
quelle