Muszę utworzyć plik zip za pomocą tego polecenia:
zip /dir/to/file/newZip /data/to/zip/data.txt
To działa, ale utworzony plik zip tworzy strukturę katalogów naśladującą katalog do surowego pliku. Jest wiele dodatkowych folderów, których nie potrzebuję.
Nie znalazłem odpowiedzi w pobieżnym spojrzeniu na stronę podręcznika lub polowanie na Google.
Odpowiedzi:
Możesz użyć
-j
.źródło
-j
nie działa dla twojego katalogu (wraz z-r
)Korzystanie
-j
nie będzie działać razem z-r
opcją.A więc obejście tego może być następujące:
Lub wersja liniowa
możesz skierować dane wyjściowe,
/dev/null
jeśli nie chcesz,cd -
aby były wyświetlane na ekranieźródło
cd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
cd path/to/parent/dir/
można łatwo obliczyć liczbę podwójnych kropek../
.Użyj
-j
opcji:źródło
Nieco powiązane - szukałem rozwiązania, które zrobiłoby to samo dla katalogów. Niestety
-j
opcja nie działa w tym przypadku :(Oto dobre rozwiązanie, jak to zrobić: /superuser/119649/avoid-unwanted-path-in-zip-file
źródło
Alternatywnie możesz utworzyć tymczasowy symboliczny link do swojego pliku:
Działa to również w przypadku katalogu.
źródło
Zachowaj katalog nadrzędny, aby
unzip
nie wyrzucać plików wszędziePodczas kompresowania katalogów utrzymanie katalogu nadrzędnego w archiwum pomoże uniknąć zaśmiecania bieżącego katalogu, gdy później rozpakujesz plik archiwum
Aby uniknąć zachowywania wszystkich ścieżek, a ponieważ nie można jednocześnie używać opcji -j i -r (pojawi się błąd), można to zrobić w ten sposób:
To
../$(basename $PWD)
magia, która zachowuje katalog nadrzędny.Teraz
unzip my.zip
podamy folder zawierający wszystkie twoje pliki:Zamiast zaśmiecać bieżący katalog rozpakowanymi plikami:
źródło
Wystarczy użyć
-jrm
opcji, aby usunąć struktury plików i katalogówźródło