Jak zrobić katalogi w pliku zip względem katalogu docelowego zamiast mojego katalogu roboczego

25

Wywołuję polecenie zip ze skryptu, w którym nie mogę zmienić katalogu. Muszę zrobić plik zip data/kit123/z katalogu, w którym znajdują się dane, ale chcę, aby zawartość zip była tylko zawartością kit123, ze ścieżkami względem kit123.

To jest struktura katalogów

myworkingdir
    data
        kit123
            kitpart1
                file.xcf
                anotherfile.xcf
            kitpart2
                ...
        kit124
            ...

Mój skrypt działa w katalogu myworkingdir i nie może zmieniać katalogów.

Jeśli zadzwonię

zip -r kit123.zip data/kit123

wtedy struktura w pliku zip będzie

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

ale chcę, żeby tak było

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Czy mogę skorzystać z opcji zip, aby to osiągnąć? Wydaje się dziwne, że powinno zależeć od mojego katalogu roboczego

Wiem, że to nie -j. ten niszczy strukturę w zestawie 123

Nathan
źródło
Bah, nieważne, wymyśliłem, jak zmienić katalog (w Pythonie), miałem po prostu źle zorganizowane uprawnienia. Nadal chciałbym wiedzieć, czy zip ma taką opcję.
Nathan
Python zipfile.write(arcname=pozwala na to btw: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.write
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

18

Jak zauważysz w komentarzach, które wiesz, jak zmienić katalog za pomocą skryptu, wyjaśnię sytuację za pomocą zip dotyczącą względnych ścieżek.

Jest to prawdopodobnie najprostszy, aby otworzyć zacisk i cddo kit123; musisz ustawić katalog docelowy jako katalog roboczy - nie możesz uruchomić polecenia z bazy katalogu domowego lub przejmie on wszystkie ścieżki /home/$USER/..Jeśli użyjesz tej -jopcji, usunie wszystkie ścieżki, ponieważ nie ma to naprawdę odpowiednik opcji tar, za --strippomocą której można określić różne poziomy usuwania ścieżki.

Więc przejdź do katalogu docelowego ( kit123) i wprowadź:

zip -r kit123.zip *

Spowoduje to rekurencyjne ( -r) zachowanie wszystkich ( *) plików i katalogów plików w bieżącym katalogu ( kit123), a ponieważ ścieżki względne ( -p) są zachowywane automatycznie, chyba że -jjest dostępna opcja, struktura katalogów będzie taka, jak chcesz. Kit123i podfoldery ( kitpart1) z własnymi plikami będą obecne:

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Możesz sprawdzić zawartość pliku zip za pomocą unzip -l zipfile.zip.

Aby uzyskać więcej informacji na temat innych dostępnych opcji zip, zobacz man zipi stronę internetową Ubuntu online .


źródło