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

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

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

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

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

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

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

решение1

Для этого можно использовать -Cопцию :tar

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

Из страницы руководства 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.

решение2

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

Первый, на мой взгляд, проще. Просто 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'

решение3

Сначала перейдите в рабочий каталог,

cd /your/working/directory/ 

Тогда используйте магию *:-)

tar -cvf temp.tar *

решение4

Чтобы избежать этого dot dir, вы можете удалить его постфактум:

tar czC /path/to/dir . --transform='s,^\./,,' >| foo.tgz

Это создаст архив, содержащий толькосодержаниеиз /path/to/dir.

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