Jeśli chcesz przechowywać wszystkie pliki folder
pod ich nazwami bez wskazania katalogu, możesz skorzystać z tej -j
opcji.
zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3
lub
zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}
Jeśli masz pliki w podkatalogach, nie będą one również zawierać żadnego elementu katalogu w archiwum, np. folder/subdir/foo
Będą przechowywane w archiwum jako foo
.
Ale prawdopodobnie łatwiej byłoby przejść do katalogu. To prawie dokładnie tyle samo pisania co metoda klamry. Jeśli to zrobisz, jeśli dodasz pliki do podkatalogów, będą one miały swoją ścieżkę względną z katalogu, w którym się zmieniłeś, np. folder/subdir/foo
Zostaną zapisane jako subdir/foo
.
(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)
Do użytku interaktywnego tracisz w ten sposób ukończenie powłoki, ponieważ powłoka nie zdaje sobie sprawy, że po uruchomieniu zip
polecenia będziesz w innym katalogu . Aby temu zaradzić, wydaj cd
polecenie osobno. Aby łatwo wrócić do poprzedniego katalogu, możesz użyć pushd
i popd
.
pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd
Jeśli chcesz mieć pełną kontrolę nad ścieżkami przechowywanymi w pliku zip, możesz utworzyć las dowiązań symbolicznych. O ile nie podano inaczej, zip
nie przechowuje dowiązań symbolicznych.
-j
miałoby to zastosowanie tylko i to skompresowałoby wszystkie foldery do jednego katalogu na poziomie głównym w ZIP. Nie tego szukasz, prawda?