Как исключить абсолютные пути для tar? - PullRequest
35 голосов
/ 01 июля 2010

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

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

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

Ответы [ 4 ]

51 голосов
/ 19 декабря 2012

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

50 голосов
/ 01 июля 2010

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

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

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

10 голосов
/ 30 августа 2014

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

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

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

0 голосов
/ 22 июля 2014

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

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