Как исключить абсолютные пути для Tar?
Я запускаю PHP script, который получает мне абсолютные пути файлов, которые я хочу выполнить. Это синтаксис, который у меня есть:
tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls
когда я разблокирую, он создает абсолютный путь к файлам. Как мне получить только /path
со всем, что под ним показывать?
Ответы
Ответ 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)