tar: Как создать файл tar с произвольными ведущими каталогами без cd для родительского каталога


23

Скажем, у меня есть каталог файлов на

/home/user1/dir1

и я хочу создать tar только с "dir1" в качестве ведущего каталога:

/dir1/file1
/dir1/file2

Я знаю, я могу сначала перейти в каталог

cd /home/user1/
tar czvf dir1.tar.gz dir1

Но при написании сценариев переход из каталога в каталог не всегда выгоден. Мне интересно, есть ли способ сделать это с абсолютными путями без изменения текущих каталогов?

Я знаю, что всегда могу создать файл tar с абсолютными путями ВНУТРИ и использовать

--strip-components 

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

Благодарность!

Ответы:


24

tar -C меняет каталог

tar -C /home/user1/ -cvzf dir1.tar.gz dir1

Кстати, удобный для отслеживания смены каталогов ... используйте pushd и popd.

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd

1
Спасибо. Я не знал, что опцию "-C" нужно использовать раньше других опций ... Я пробовал "tar -cvzf dir1.tar.gz dir1 -C / home / user1 /" раньше, но это не сработало.
Ян

1
Не работает: tar: dir: Невозможно указать: нет такого файла или каталога (при условии, что dir1 находится в / home / user1 /)
tribbloid

21

С помощью gnu tar вы можете создать архив с другим базовым каталогом, отличным от действительного:

tar -c --transform 's,^\.,mybasedir,' .

Просто адаптируйте выражение sed к вашим потребностям.


5

Хорошо, я также узнал, что

tar -czvf file1.tar.gz /home/user1/dir1/../dir1

также работал так, как я хотел.


Хотя подстановочные знаки, такие как "*", не работают
Кертис Яллоп

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.