Я делаю .tar
некоторые файлы с путем example/super_user/Output.*
.
В результате .tar
выглядит так:
+ example
+ super_user
- Output.zip
- Output.xml
- Output.txt
Но я хочу, чтобы файл был похож на следующее:
- Output.zip
- Output.xml
- Output.txt
Вы знаете, как я могу достичь этого, находясь в другом каталоге?
unix
compression
tar
Der Hochstapler
источник
источник
Ответы:
tar сохранит структуру файлов и папок, поэтому я не думаю, что есть какой-либо способ дать команду tar сгладить иерархию во время создания.
Один из обходных путей - временно изменить каталог, создать tar, а затем вернуться назад - быстрый пример ниже:
источник
Если каталог «example» находится в корне файловой системы, вот еще один способ:
это изменит каталог на точку, в которую вы хотите сделать tar. Предостережение заключается в том, что если в / example / super_user есть какие-либо подкаталоги, структура каталогов будет сохранена для этих подкаталогов.
источник
/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"
не будете работать.-C
несколько раз в однойtar
команде, если вам нужно добавить несколько файлов, распределенных по нескольким каталогам, но все же хотите, чтобы файл tar был плоским.Я разместил свой ответ здесь:
/programming/13924856/unix-tar-do-not-preserve-directory-structure
репост (для ленивых чел)
Это некрасиво ... но работает ...
У меня была такая же проблема, но с несколькими папками я просто хотел выровнять все файлы. Вы можете использовать опцию "transform", чтобы передать выражение sed, и ... оно работает как положено.
это выражение:
's/.*\///g'
(удалите все перед '/')Это последняя команда:
источник
Чтобы создать tar (ARCHIVE.tar) со всеми файлами из каталога (DIR), без какой-либо информации о родительском каталоге (даже не ./), вы можете использовать что-то вроде:
Вы можете поиграть с поиском, чтобы ограничить глубину, выбрать определенные файлы и многое другое.
Удачи!
источник
-printf
это нестандартная команда. Многие из них работают только с конкретными версиями find. Обычно мы отмечаем те , при ответе на вопрос о Super User (например , с «-blah является расширение Gnu и не будет работать везде»).Я создал временный каталог. А в каталоге созданы символические ссылки на все файлы, которые будут включены в файлы. Затем я сделал tar -h -C. так что все файлы (не ссылки, а их содержимое) включены в архив с нужным именем.
источник
Если это все содержимое tarball, вы можете использовать
--strip-components
опцию tar GNU, чтобы удалить 2 уровня перед файлами.источник
--strip-path
но ее использование ничего не изменит.Другой способ временный каталог изменения, чтобы поставить
cd
иtar
команды в круглых скобках(
)
:Преимущество этого заключается в том, что вы всегда будете неявно возвращаться к исходному каталогу, когда блок будет завершен. т.е. нет необходимости в
pushd
...popd
блоках или отслеживании того, кудаcd
вернуться.источник
pushd помещает текущий путь к каталогу в
DIR
стек и перемещается в папку содержимого. Затем вы возвращаетесь в исходный каталог с помощьюpopd
.источник