создать плоский архив tar: игнорирование всех родителей при добавлении папок

Я хочу добавить несколько папок (рекурсивно) в новый tar-архив. Все папки должны находиться на корневом уровне полученного архива. Есть ли способ добавить все папки без их родителей и без использования cd in в свои каталоги и добавить их шаг за шагом?

Рассмотрим следующую структуру каталогов

 . ├── bar │  ├── bar-file │  └── barsub │  └── barsub-file └── foo ├── foo-file └── foosub └── foosub-file 

Я хотел бы добавить bar и foosub в tar-архив.

 # add folders with different parents # could be eg /some/foo/foosub and /other/bar as well $ tar cvf archive.tar bar foo/foosub a bar a bar/bar-file a bar/barsub a bar/barsub/barsub-file a foo/foosub a foo/foosub/foosub-file 

но я хотел

 . ├── bar │  ├── bar-file │  └── barsub │  └── barsub-file └── foosub └── foosub-file 

Есть ли простой способ создания такого плоского tar-архива?

  • «Tar ./files.tar -C $ HOME» приводит к ошибке «tar: invalid option -.»
  • Резервное копирование TAR на удаленный сервер
  • Создать версию с помощью tar
  • Как возобновить команду tar, которая была убита
  • Только файлы списка tar
  • Мой ISO загружен как Tar.Gz?
  • Создать архив tar текущего каталога без предшествующего периода
  • Запретить показ сообщения о отметке времени при запуске «tar xzf»
  • 2 Solutions collect form web for “создать плоский архив tar: игнорирование всех родителей при добавлении папок”

    С помощью GNU или FreeBSD tar вы можете применить преобразование к именам файлов при добавлении их в архив (или извлечении их).

     tar czf foo.tgz --transform='!^bar/!!' bar/ foo 

    В переносном режиме вы можете сделать то же самое с pax .

     pax -w -pe -s'!^bar/!!' foo bar/ 

    tar cvf archive.tar bar -C /path/to/foo/ .

    Linux и Unix - лучшая ОС в мире.