jak określić rozpakowany katalog docelowy

21

Czy w poleceniu linux zip istnieje opcja umożliwiająca kodowanie katalogu docelowego, do którego rozpakowuje. Na przykład chciałbym skompresować pliki ./mydir do pliku myzipfile.zip, ale chcę, aby polecenie unzip utworzyło określony katalog „projx” i rozszerzyło do niego pliki z rozszerzeniem ./mydir.

zip -r myzipfile.zip mydir (-option to expand into 'projx' when unzipped? )
seedhom
źródło
W systemie
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

18

Nie ma takiej opcji, przynajmniej nie dla Info-ZIP. Musisz sam stworzyć katalog projx , przenieść / skopiować do niego pliki, a następnie przekazać go zip.

Jeśli katalog już istnieje, po prostu przekazać opcję -d, aby unzipokreślić katalog docelowy dla ekstrakcji.

scai
źródło
4

Aby to zrobić, istnieje inny sposób. Możesz spłaszczić całą zawartość pliku zip, stosując następującą metodę. Katalog docelowy to „ projx ” i wykonaj następujące polecenie.

cd /projx && unzip -j /path/to/myzipfile.zip

Opcja -j nazywa się „niepotrzebnymi ścieżkami” i po prostu zrzuca każdy plik do bieżącego katalogu zamiast wyodrębniania jakiejkolwiek struktury katalogów.

Chaminda Bandara
źródło
0

Nie wiem o konkretnej opcji wiersza poleceń, ale możesz użyć następujących poleceń, aby osiągnąć swój cel:

ln -s mydir projx
zip -r myzipfile.zip projx
rm projx

Pierwsze polecenie tworzy dowiązanie symboliczne, dzięki czemu można uzyskać dostęp do plików mydirrównież za pośrednictwem projx. Następnie przy użyciu Info-ZIP(testowane w wersji 2.31) dowiązanie symboliczne jest usuwane (jest to ustawienie domyślne, chyba że określono inaczej -y), a pliki są zapisywane rekurencyjnie:

adding: projx/ (stored 0%)
adding: projx/foo.1 (deflated 23%)
adding: projx/bar.2 (deflated 73%)
...

Widzisz, nazwa folderu jest również przechowywana w pliku - więc po rozpakowaniu katalog projxjest tworzony.

Nie mogę jednak wymyślić możliwości przechowywania ścieżek bezwzględnych, ale i tak jest to zły pomysł.

mpy
źródło
Ścieżka bezwzględna działa tylko w systemie MacOS, podając opcję -jj. W innych systemach operacyjnych -jobsługiwana jest tylko opcja (i -jjjest interpretowana jako -j), która usuwa wszelką wiodącą ścieżkę, a tym samym prowadzi do przeciwnej (bardzo sprytna konstrukcja ...).
scai