Risposte:
Quindi, se ho capito bene, stai cercando di archiviare i file e le cartelle in una determinata cartella ma senza includere la cartella principale.
Esempio:
/test/test.txt
/test/test2.txt
dove test.txt e test2.txt sarebbero memorizzati nella zip, ma non / test /
Puoi cd nella directory / test / quindi eseguire qualcosa del tipo,
zip -r filename.zip ./*
Che creerebbe un archivio nella stessa cartella denominata nomefile.zip. O se eseguendolo dall'esterno della cartella potresti eseguire,
zip -r test.zip test/*
/ * È la parte che include solo il contenuto della cartella, anziché l'intera cartella.
Modifica: OP voleva più zip, la soluzione è risultata essere un po 'un trucco, sono curioso di sapere se esiste un modo migliore per farlo.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
non funziona. c'è un modo corretto per ottenere questo dall'esterno della directory?
Utilizzare l' opzione -j
o --junk-paths
nel comando zip.
Dalla pagina man zip :
-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
Che ne dici di questo comando?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Speravo che ci fosse un modo per specificare il percorso memorizzato in modo più preciso.
Spero che sia di aiuto.
(cd directory && zip -r ../out.zip .)
Mantiene la shell principale nella stessa directory e cambia solo la directory della sub-shell che muore dopo il comando.