2010-06-30 2 views
35

Я запускаю скрипт PHP, который дает мне абсолютные пути файлов, которые я хочу выполнить. Это синтаксис, который у меня есть:Как исключить абсолютные пути для tar?

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls 

Когда я развожу его, он создает абсолютный путь к файлам. Как мне получить только /path со всем, что под ним показывать?

ответ

50

Если вы хотите удалить первые n ведущих компонентов имени файла, вам понадобится strip-components. Так что в вашем случае, по добыче, сделать

tar xvf tarname.tar --strip-components=2 

man page есть список многих вариантов tar «s, в том числе и этот. В некоторых более ранних версиях tar вместо этого используется --strip-path.

51

Вы неправильно используете переключатель -C, который используется для смены каталогов. Так что вам нужно сделать, это:

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls 

или если вы хотите, чтобы упаковать все под /www/path сделать:

tar -cf tarname.tar -C /www/path . 

Вы можете использовать -C переключатель несколько раз.

+4

Когда я пытаюсь сделать это, я получаю файл с именем dot, добавленный в мой архив. tar -cf tarname.tar some_file_in_current_folder -C/some/path. –

+0

Попробуйте 'tar -tvf tarname.tar', и вы увидите, что это не файл. –

0

Если вы не знаете, сколько компонентов в пути, вы можете попробовать это:

DIR_TO_PACK=/www/path/ 
cd $DIR_TO_PACK/.. 
tar -cf tarname.tar $(basename $DIR_TO_PACK) 
9

Для меня следующая работает лучше:

tar xvf some.tar --transform 's?.*/??g' 

--transform аргумент является заменой regex для sed, к которому загружается каждый извлеченный путь к файлу. В отличие от --strip-components, он удалит всю информацию о пути, а не только фиксированное количество компонентов.

+2

Обратите внимание, что длинная опция имени '-transform' предназначена только для GNU tar. Эквивалентная опция BSD tar - '-s', следуя шаблону'/old/new/[gps] ', и использование этого способа, как вы сказали, приведет к сглаживанию иерархии каталогов, может оказаться непригодным на практике. – Meow

+1

Лучший вариант, когда вы не знаете, как глубоко проходит кроличья дыра (я имею в виду вашу структуру каталогов). Убедитесь, что все имена файлов уникальны по каталогам или вы можете столкнуться с неожиданными результатами. – trs