В моем текущем каталоге есть два подкаталога:
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