.tar файлы без структуры каталогов

я .tarдобавление некоторых файлов с путем example/super_user/Output.*.

Результирующий .tar выглядит так:

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

Но я хочу, чтобы файл был таким:

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

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

8 ответов
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

      Добавить комментарий

      Ваш адрес email не будет опубликован. Обязательные поля помечены *