Подтвердить что ты не робот

Как исключить абсолютные пути для Tar?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

tar xvf some.tar --transform 's?.*/??g'
Аргумент

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

Ответ 4

Если вы не знаете, сколько компонентов находится на пути, вы можете попробовать следующее:

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