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? )
Odpowiedzi:
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
, abyunzip
określić katalog docelowy dla ekstrakcji.źródło
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.
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.
źródło
Nie wiem o konkretnej opcji wiersza poleceń, ale możesz użyć następujących poleceń, aby osiągnąć swój cel:
Pierwsze polecenie tworzy dowiązanie symboliczne, dzięki czemu można uzyskać dostęp do plików
mydir
również za pośrednictwemprojx
. Następnie przy użyciuInfo-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:Widzisz, nazwa folderu jest również przechowywana w pliku - więc po rozpakowaniu katalog
projx
jest tworzony.Nie mogę jednak wymyślić możliwości przechowywania ścieżek bezwzględnych, ale i tak jest to zły pomysł.
źródło
-jj
. W innych systemach operacyjnych-j
obsługiwana jest tylko opcja (i-jj
jest interpretowana jako-j
), która usuwa wszelką wiodącą ścieżkę, a tym samym prowadzi do przeciwnej (bardzo sprytna konstrukcja ...).