Mam plik myarchive.zip, który zawiera wiele katalogów, plików itp. Powiedzmy, że ten plik myarchive.zip znajduje się w katalogu o nazwie „b”. Cóż, kiedy używam polecenia „unzip myarchive.zip”, system domyślnie tworzy katalog o nazwie „myarchive” z zawartością pliku zip. Ja nie chce, aby system do stworzenia tego „MojeArchiwum” katalogu - Chcę tylko zawartość być rozpakowane do katalogu „B”. czy to możliwe?
To, co robię teraz, to po prostu wydanie polecenia „cp”, aby skopiować pliki z nowo utworzonego katalogu (w tym przypadku „myarchive” do „b”) tam, gdzie chcę.
unzip
nie tworzy katalogu. Twój plik zip prawdopodobnie ma katalog na najwyższym poziomie.mv
zamiastcp
.mv archive/* .; rmdir archive/
lub podobne.Odpowiedzi:
Moja wersja
unzip
ma-j
opcję, aby nie tworzyć żadnego katalogu.Więc
Wyodrębni wszystkie pliki do bieżącego katalogu bez przywracania struktury katalogów zapisanych w
zip
pliku.Jeśli chcesz usunąć tylko jeden poziom katalogów z archiwum (wypakuj
myarchive/dir/file
jakodir/file
, niefile
), możesz użyćbsdtar
(który obsługujezip
pliki oprócztar
plików) zamiast tego i jego-s
opcji.źródło
-j
z archiwum struktura katalogu nie jest odtwarzana, a wszystkie pliki są przechowywane w folderze rozpakowywania. Oznacza to, że WSZYSTKIE podfoldery są usuwane. Więc gdybyś miałzip/A/f1
,zip/A/B/f2
azip/A/B/C/f3
skończyłbyś z jednym folderem z f1, f2, f3. Robi się fajnie, jeśli masz pliki o tej samej nazwie w różnych podfolderach. Zwykle chcesz po prostu upuścić górny folder, a nie całą strukturę katalogów.Wygląda na to, że jest to naprawdę proste z bsdtar :
bsdtar --strip-components=1 -xvf file.zip
źródło
Jaka odpowiedź w pytaniu nie określa, w jaki sposób zostanie zaakceptowana odpowiedź, jeśli nadal chcesz wyodrębnić do określonego folderu bez korzystania ze ścieżek folderów zapisanych w plikach zip, możesz użyć
-j
opcji z-d
opcją w ten sposób :lub w twoim przypadku
źródło
Jeśli wykonanie
unzip myarchive.zip
powoduje utworzenie katalogumyarchive
zawierającego wszystko, oznacza to, że twórca pliku zip faktycznie wykonał zip w tym katalogu.Jedynym sposobem na stworzenie tego, co chcesz, jest przeniesienie całej zawartości poza katalog po wykonaniu
unzip
:[user@host]:some/path/b$ unzip myarchive.zip
[user@host]:some/path/b$ ls
{ pokazuje katalogmyarchive
}[user@host]:some/path/b$ mv myarchive/* .
[user@host]:some/path/b$ rm -R myarchive
[user@host]:some/path/b$ ls
{ pokazuje pierwszy poziom myarchive (bezpośrednio wb
) }źródło
mv myarchive/.* .
przenieść wszystkie ukryte pliki, takie jak .gitignore i .htaccess.rm -R
i ponieważ nie używaszls -a
, nie pokazujesz, czy są jakieś pliki kropek; co się teraz stanie, gdy uruchomiszrm -R
i są pliki kropkowe? Nie skopiowałeś ich, więc są zgubione. Naprawdę powinieneś to naprawić i może wyjaśnić różnicę, ponieważ jest to coś, co dość często potknie nowych początkujących; i zastanów się: co jeśli nie jest to archiwum, które mają? A co, jeśli dodadzą do polecenia usunięcia archiwum po rozpakowaniu?rmdir
się, że najpierw jest pusty ... Ale jeśli użytkownik nie wie o plikach kropkowych, pomyliłby je.