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
command-line
zip
Nathan
źródło
źródło
zipfile.write(arcname=
pozwala na to btw: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.writeOdpowiedzi:
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
cd
dokit123
; 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-j
opcji, usunie wszystkie ścieżki, ponieważ nie ma to naprawdę odpowiednik opcji tar, za--strip
pomocą której można określić różne poziomy usuwania ścieżki.Więc przejdź do katalogu docelowego (
kit123
) i wprowadź: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-j
jest dostępna opcja, struktura katalogów będzie taka, jak chcesz.Kit123
i podfoldery (kitpart1
) z własnymi plikami będą obecne:Możesz sprawdzić zawartość pliku zip za pomocą
unzip -l zipfile.zip
.Aby uzyskać więcej informacji na temat innych dostępnych opcji
zip
, zobaczman zip
i stronę internetową Ubuntu online .źródło