сжатие tar без структуры каталогов

сжатие tar без структуры каталогов

В моем текущем каталоге есть два подкаталога:

dir_1/
   - file1.png
   - file2.png
   ...
   - fileN.png

dir_2/
   - fileA.txt
   - ...
   - fileZ.txt

Когда я сжимаю два каталога с помощью tar:

tar -cvzf result.tar.gz dir_1/ dir_2/ 

я получилрезультат.tar.gzно он сохраняет структуру каталогов. Я имею в виду, когда я извлекаюрезультат.tar.gz, я снова получил dir_1& dir_2.

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

result/
   file1.png 
   ... 
   fileN.png 
   fileA.txt
   ...
   fileZ.txt

решение1

Я думаю, что это можно сделать с помощью -Cопции.

Из страницы руководства tar:

-C directory, --cd directory, --directory directory
    In c and r mode, this changes the directory before adding the following files.
    In x mode, change directories after opening the archive but before extracting
    entries from the archive.

Это означает, что вы должны быть в состоянии бежать

tar cvzf result.tar.gz -C /path/to/dir1/ . -C /path/to/dir2/ .

чтобы достичь желаемого.

решение2

С GNU tar вы можете использовать --transformопцию для перезаписи имен файлов при добавлении или извлечении их в/из архива. С BSD tar или с pax эта опция -sделает то же самое.

Чтобы удалить ведущий компонент каталога (чтобы он dir_1/subdir/somefileсохранился как subdir/somefile):

tar -czf result.tar.gz --transform '!^[^/]*/!!' dir_1 dir_2

Чтобы удалить все компоненты каталога (чтобы они dir_1/subdir/somefileсохранились как somefile):

tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2

Связанный контент