создать плоский архив 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 для исключения некоторых файлов
  • tar-экстракт зависает от несуществующего файла
  • GNU `tar` запускает` stat` в исключенном каталоге. Это нормально?
  • Что делает параметр -f в команде tar
  • Как использовать команду tar Unix с неявным пути к файлу?
  • tar удалить заданный вопрос
  • В чем разница между параметрами tar -newer и -listed-incremental
  • Как проверить архив tar, который уже написан?
  • 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 - лучшая ОС в мире.