Mam folder, który zawiera wiele plików
teczka
- artifact1.app
- artifact2.ext2
- artifact3.ext3
- ...
Moim celem jest skompresowanie pliku spoza tego folderu (więc bez użycia cd
polecenia) bez uwzględnienia katalogu reż.
zip -r ./folder/artifact.zip ./folder/artifact1.app
To polecenie obejmuje katalog folderu w końcowym pliku zip. Jakieś wskazówki?
Powiązane pytanie: spakuj zawartość folderu bez dołączania samego folderu
-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?Odpowiedzi:
Jeśli chcesz przechowywać wszystkie pliki
folder
pod ich nazwami bez wskazania katalogu, możesz skorzystać z tej-j
opcji.lub
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 jakofoo
.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 jakosubdir/foo
.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ć, wydajcd
polecenie osobno. Aby łatwo wrócić do poprzedniego katalogu, możesz użyćpushd
ipopd
.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.źródło
folder
), możesz po prostu użyć znaku wieloznacznego, tj.zip -j folder/*
.profile
) Nie zostaną uwzględnione w archiwum. Zamiast tego zmień bieżący katalog roboczy i określ.
jako plik do zarchiwizowania:cd folder && zip -r ../folder.zip .