создание tar-архива без включения родительского каталога

Я пытаюсь создать графическую программу для моего скрипта.

Внутри скрипта я использую tar для создания tar-архива.

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

tar -cvf temp.tar /home/username/dir1/dir2/selecteddir 

Мой архив tar включает в себя: home, username, dir1, dir2 и selecteddir, в то время как я хочу, чтобы tar создавал только архив, включая selecteddir.

Вы можете использовать параметр -C tar для выполнения этого:

 tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir 

На странице man tar :

 -C 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. 

Существует два метода, которые можно использовать для решения этой проблемы.

Первый, на мой взгляд, проще. Просто cd в каталог, расположенный непосредственно над тем, который вы хотите сжать. В этом случае это будет dir2 .

 $ cd /home/username/dir1/dir2/ $ tar -cvf temp.tar selecteddir 

Второй способ – использовать опцию --transform которая принимает выражение sed и запускает его против имен файлов. Примечание: вам придется избегать / в выражении sed .

 $ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'