28

Я .tar ИНГ некоторые файлы примера путь / SUPER_USER / вывода.*

Получившийся .tar выглядит так:

+ example
    + super_user
          - Output.zip
          - Output.xml
          - Output.txt

Но я хочу, чтобы файл был похож на следующее:

- Output.zip
- Output.xml
- Output.txt

Вы знаете, как я могу добиться этого, находясь в другом каталоге?

8 ответов8

22

Если каталог «example» находится в корне файловой системы, вот еще один способ:

tar -C /example/super_user -cvf result.tar .

это изменит каталог на точку, в которую вы хотите сделать tar. Предостережение заключается в том, что если в /example /super_user есть какие-либо подкаталоги, структура каталогов будет сохранена для этих подкаталогов.

11

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

Один из обходных путей - временно изменить каталог, создать tar, а затем вернуться назад - быстрый пример ниже:

cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..
9

Я разместил свой ответ здесь:

https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure

репост (для ленивых чел)


Это некрасиво ... но работает ...

У меня была такая же проблема, но с несколькими папками я просто хотел выровнять все файлы. Вы можете использовать опцию "transform", чтобы передать выражение sed, и ... оно работает как положено.

это выражение:

's/.*\///g' (удалите все перед '/')

Это последняя команда:

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info

6

Чтобы создать tar (ARCHIVE.tar) со всеми файлами из каталога (DIR), без какой-либо информации о родительском каталоге (даже не ./), вы можете использовать что-то вроде:

find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"

Вы можете поиграть с поиском, чтобы ограничить глубину, выбрать определенные файлы и многое другое.

Удачи!

3

Я создал временный каталог. А в каталоге созданы символические ссылки на все файлы, которые будут включены в файлы. Затем я сделал tar -h -C. так что все файлы (не ссылки, а их содержимое) включены в архив с нужным именем.

1

Если это все содержимое tarball, вы можете использовать опцию --strip-components GNU tar, чтобы удалить 2 уровня перед файлами.

1

Другой способ временного изменения каталога - поместить команды cd и tar в круглые скобки ( ):

(cd example/super_user; tar -cvf ../../result.tar *)

Преимущество этого заключается в том, что вы всегда будете неявно возвращаться к исходному каталогу после завершения блока. т.е. не нужно для pushd .. popd блоков или отслеживания , где cd обратно.

0
pushd example/super_user
tar -cf output.tar Output.*
popd

pushd помещает текущий путь к каталогу в стек DIR и перемещается в папку содержимого. Затем вы возвращаетесь в исходный каталог с помощью popd .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .