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


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.

Ответы:


8

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


Хмм, приятно знать. Я спросил об этом, потому что несколько дней назад, при создании архива, он непреднамеренно добавлял несколько путей сверху. Так что возникла проблема с их разархивированием из-за дополнительных топовых путей. Однако я не могу повторить это сегодня - сегодня все работает нормально, то есть, когда в каталоге 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/ )


5
Вы понимаете, что это команда DOS, и она не имеет ничего общего с командной строкой Linux, верно?
МестреЛион

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.