unzip
имеет отличный вариант -j
, при котором структура каталогов архива отбрасывается, и все файлы извлекаются в один и тот же каталог.
Есть ли способ заставить tar
работать таким же образом? Ничто в справочной странице, кажется, не указывает на это.
Итак, есть ли альтернатива, предпочтительно свободное программное обеспечение, инструмент, который сделает это?
Ответы:
GNU tar живет от фуритурита, поэтому, естественно, также есть несколько вариантов для этого.
http://www.gnu.org/software/tar/manual/html_node/transform.html
Если вы просто хотите удалить несколько сегментов пути, то
--strip-components=n
или--strip=n
часто будете делать:Но также возможно переписать и перезаписать файлы, которые будут извлечены (флаги есть
--transform
или--xform
принимают ereg с/x
модификатором):Для перечисления tar вам нужна дополнительная
--show-transformed
опция:Я считаю, что варианты перезаписи также работают для упаковки, а не только для извлечения. Но
pax
имеет явно более приятный синтаксис.источник
s#.*/##
?--strip
не упоминается на странице руководства os x tar, но все равно работает, спасибо!--strip
и--strip-components
?Вы можете сделать это довольно легко в два этапа. При необходимости адаптируйте:
источник
find -exec mv -i
вместоfind | xargs
) .... простые шаги, которые я могу повторить в любой системе без необходимости носить с собой сценарий, чтобы сделать это для меня.tmpdir=$( mktemp -d )
удобно при создании временных каталоговpax
может это сделать:или
Вы можете сначала проверить операцию замены имени, опуская
-r
опцию.источник
Возможное решение, которое не требует установки чего-либо.
tar tvf
чтобы получить все файлы из архиваИзвлеките эти файлы по отдельности - распакуйте tar в stdout и перенаправьте в $ filename
сохранить как extract.sh и запустить как
extract.sh myfile.tar
. Он также перезапишет любые повторяющиеся имена файлов, найденные в каталогах, извлеченных из архива.источник
-O
Опция извлекает файл на стандартный вывод, и>
переадресовывает этот вывод в файл. Так что в моем примере я извлекаю foo.mp3 и перенаправляю его в bar.mp3. Имена файлов произвольны.источник