я .tar
добавление некоторых файлов с путем example/super_user/Output.*
.
Результирующий .tar
выглядит так:
+ example
+ super_user
- Output.zip
- Output.xml
- Output.txt
Но я хочу, чтобы файл был таким:
- Output.zip
- Output.xml
- Output.txt
Вы знаете, как я могу этого добиться, находясь в другом каталоге?
8 ответов
tar сохранит структуру файлов и папок, поэтому я не думаю, что есть какой-либо способ указать tar для выравнивания иерархии во время создания.
Один из обходных путей — временно сменить каталог, создать tar и вернуться назад — быстрый пример ниже:
cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..
Если каталог example находится в корне файловой системы, вот другой способ:
tar -C /example/super_user -cvf result.tar .
это изменит каталог до точки, в которой вы хотите сделать tar. Предостережение: если есть какие-либо подкаталоги в / example / super_user, структура каталогов будет сохранена для этих подкаталогов.
- 3
Это ответ на возникшую проблему. Упомянутое предостережение в данном случае не является проблемой. Все остальные ответы — это обходные пути для учета вариаций проблемы.
— река
30 ноя ’16 в 10: 052016-11-30 10:05 Это действительно решение этого вопроса. Каталог не обязательно должен быть корневым, если предположить, что структура каталогов
/home/u/foo/bar
, рабочий каталог/home/b
, тогдаtar -C foo/bar -cvf qiz.tar .
работает хорошо. Одно предостережение заключается в том, что вы не можете использовать подстановочные знаки, т.е.tar -C foo/bar -cvf qiz.tar *.log
,tar -C foo/bar -cvf qiz.tar "*.log"
или жеtar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
не сработает.— Брайс
13 сен ’18 в 9:26- 1
Следует отметить, что вы можете использовать
-C
несколько раз в одномtar
, если вам нужно добавить несколько файлов, распределенных по нескольким каталогам, но все же хотите, чтобы файл tar был плоским.— ноль 298
25 апр ’19 в 13:54
Я разместил свой ответ здесь:
https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure
репост (для ленивых пользователей)
Это некрасиво … но работает …
У меня была такая же проблема, но с несколькими папками я просто хотел сгладить все файлы. Вы можете использовать опцию «преобразовать», чтобы передать выражение sed и … оно работает должным образом.
это выражение:
's/.*///g'
(удалите все перед «https://superuser.com/»)
Это последняя команда:
tar --transform 's/.*///g' -zcvf tarballName.tgz */*/*.info
Чтобы создать tar (ARCHIVE.tar) со всеми файлами из каталога (DIR), без какой-либо информации о родительском каталоге (даже ./), вы можете использовать что-то вроде:
find "DIR" -type f -printf "%fn" | xargs tar cf ARCHIVE.tar -C "DIR"
Вы можете поиграть с находкой, чтобы ограничить глубину, выбрать определенные файлы и многое другое.
Удачи!
Я получаю «find: -printf: unknown primary or operator» в команде поиска OSX. Какие-нибудь советы?
— TCB13
3 фев ’13 в 15:55-printf
это нестандартная команда. Многие из них работают только с определенными версиями find. Обычно мы отмечаем их при ответе на вопрос о суперпользователе (например, «-blah — это расширение Gnu и не будет работать везде»).— Ее
19 сен ’14 в 11:36