
Я пытаюсь создать графическую программу для своего скрипта.
Внутри скрипта я использую 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
.