Mam plik o nazwie All CRGs.zip
i chcę rozpakować jego zawartość do katalogu o nazwie data
(który już istnieje i zawiera kilka innych plików).
czy to możliwe? Pracuję na OSX.
Próbowałem:
$ unzip "All CRGs.zip" -d data/
Ale to rozpina wszystko, na data/All CRGs
co nie jest to, czego szukam. Chciałbym, żeby wszystko poszło od razu data
.
czy to możliwe?
Odpowiedzi:
Możesz albo odtworzyć całą strukturę folderów, w tym folder
All CRGs
-Folder, albo możesz pominąć wszystkie foldery w pliku ZIP, używając opcji-j
-flag dla polecenia unzip.Problem polega na tym, że plik ZIP został utworzony przy użyciu opcji
All CRGs
-Folder jako najwyższego poziomuzip "All CRGs.zip" "All CRGs"
. Byłby właściwy sposób,zip "All CRGs.zip" "All CRGs/*"
który utworzyłby archiwum ZIP wszystkich plików i folderów wAll CRGs
folderze bez otaczającego folderu.Tak więc jedynym sposobem na wyodrębnienie tylko plików przez zachowanie struktury folderów byłoby coś takiego:
Rozpakuje pełny folder, a następnie przeniesie zawartość folderu o jeden poziom w górę i ostatecznie usunie (teraz pusty) folder „Wszystkie CRG”.
źródło
All CRGs/*
z cudzysłowu, pliki zostaną dodane do zip, ale z obecnym katalogiem nadrzędnym.mv
komenda nie ruszy ukryte pliki.mv "data/All CRGs/.*" "data/"
wymagana jest dodatkowa .Ponieważ wiesz, że plik zip zawiera niechciany folder najwyższego poziomu, a ponieważ znasz nazwę tego folderu najwyższego poziomu, możesz użyć dowiązania symbolicznego, aby cała zawartość tego folderu pojawiła się w obiekcie nadrzędnym w następujący sposób:
Ten
ln
krok powoduje utworzenie folderu,data/All CRGs
który prowadzi do bieżącego katalogu (względemdata/
), czylidata/
. Następnie, gdy rozpakujesz plikiAll CRGs.zip
iunzip
polecenie spróbuje utworzyćdata/All CRGs/file.dat
, plik zostanie utworzony jakodata/./file.dat
.Tę technikę można zademonstrować bez pliku zip za pomocą dotyku:
Możesz także użyć tej sztuczki, aby wyodrębnić niektóre pliki lub foldery do alternatywnego folderu:
Wtedy wszystko w rozpakowywanym archiwum
subdir2
pojawi się w/tmp
.źródło