Odpowiedzi:
Więc jeśli dobrze rozumiem, próbujesz zarchiwizować pliki i foldery w określonym folderze, ale bez uwzględnienia folderu głównego.
Przykład:
/test/test.txt
/test/test2.txt
gdzie test.txt i test2.txt byłyby przechowywane w zipie, ale nie / test /
Możesz cd do katalogu / test /, a następnie uruchomić coś takiego,
zip -r filename.zip ./*
Który utworzyłby archiwum w tym samym folderze o nazwie nazwa_pliku.zip. Lub jeśli uruchamiasz go spoza folderu, możesz uruchomić,
zip -r test.zip test/*
/ * To część, która zawiera tylko zawartość folderu, a nie cały folder.
Edycja: OP chciał wielu zamków, rozwiązanie okazało się trochę hackem, jestem ciekawy, czy istnieje lepszy sposób na zrobienie tego.
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/*
nie działa. czy jest jakiś właściwy sposób, aby to osiągnąć spoza katalogu?
Użyj opcji -j
lub --junk-paths
w poleceniu zip.
Ze strony podręcznika 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).
Co powiesz na to polecenie?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Miałem nadzieję, że istnieje sposób na dokładniejsze określenie zapisanej ścieżki.
Mam nadzieję że to pomoże.
(cd directory && zip -r ../out.zip .)
Utrzymuje główną powłokę w tym samym katalogu i zmienia tylko katalog podpowłoki, która umiera po wydaniu polecenia.