распаковать как обрезать верхние каталоги

13

У меня есть почтовый архив. Команда unzip -l myarchive.zipдает этот список:

top/subtop/files/1.txt
top/subtop/files2/2.txt
etc

Корневые папки top / subtop для всех файлов. Как извлечь эти файлы без двух верхних / вложенных папок?

Например, когда я нахожусь в каталоге / home / myuser / public_html files/1.txtи files2/2.txtдолжен быть извлечен непосредственно в этот каталог.

Я пытался, unzip myarchive.zip top/subtop/*но в любом случае он создал каталоги top / subtop.

CamCam
источник

Ответы:

8

К сожалению, вы не можете. Ваш единственный реальный вариант - просто переместить их после их извлечения.

Sepero
источник
Хмм, приятно знать. Я спросил об этом, потому что несколько дней назад, при создании архива, он непреднамеренно добавлял несколько путей сверху. Так что возникла проблема с их разархивированием из-за дополнительных топовых путей. Однако я не могу повторить это сегодня - сегодня все работает нормально, то есть, когда в каталоге top / subtop выполняется zip -r files.zip *, он не добавляет путь top / subtop в качестве префикса к пути к файлам. Я думаю, что я делаю точно такую ​​же команду, но, как ни странно, результаты отличаются, поэтому нет необходимости удалять верхние каталоги при разархивировании.
камера
Обратите внимание, что можно игнорировать все каталоги (просто поместив все файлы рядом друг с другом) с помощью unzip -j.
Скайлар Итнер
4

Возможно, вы захотите попробовать tarкоманду, которая имеет --strip-componentsфункцию и может работать с zip-файлами.

Имон
источник
2
Не работает с tar (GNU tar) 1.15.1:tar: This does not look like a tar archive tar: Error exit delayed from previous errors
Кевин Панко
2
Tar FreeBSD может работать с ZIP-архивами. К сожалению, другие реализации tar не так полнофункциональны.
Михаил Т.
1
Для пользователей Debian tar во FreeBSD доступен как bsdtar (apt-get install bsdtar), если вы хотите использовать tar для распаковки zip-файлов.
Никлас Б
0

Я использовал эту команду, чтобы скопировать все файлы в мою корневую директорию после распаковки всех заархивированных файлов, она отлично работала. Огромная экономия времени:

for /r %f in (00P*) do @copy "%f" 

( http://mlichtenberg.wordpress.com/2011/01/25/command-line-fun-how-to-flatten-a-folder-hierarchy/ )

Kevin
источник
5
Вы понимаете, что это команда DOS, и она не имеет ничего общего с командной строкой Linux, верно?
МестреЛион
-2
$ unzip -l myarchive.zip
$ mv top/subtop/* .

#kissPrinciple;)

Romain DEQUIDT
источник