tar с относительными путями

24

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

tar czf ~/files/wp/my-page-order.tar.gz -C ~/webapps/zers/wp-content/plugins/ ~/webapps/zers/wp-content/plugins/my-page-order

Но архивные файлы все еще имеют абсолютные пути. Как я могу использовать tar с относительными путями?

Мерт Нухоглу
источник
связанные: stackoverflow.com/questions/18681595/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Ответы:

24

'~' расширяется оболочкой. Не используйте '~' с -C:

tar czf ~/files/wp/my-page-order.tar.gz \
      -C ~ \
       webapps/zers/wp-content/plugins/my-page-order

(tar будет включать webapps / zers / wp-content / plugins / my-page-order path) или

tar czf ~/files/wp/my-page-order.tar.gz \
      -C ~/webapps/zers/wp-content/plugins \
       my-page-order

(tar будет содержать путь к моей странице)

Или просто сначала CD

cd ~/webapps/zers/wp-content/plugins
tar czf ~/files/wp/my-page-order.tar.gz my-page-order
symcbean
источник
2
Объяснение неверно. Здесь не имеет значения, что ~ раскрывается оболочкой. Важно то, что -Cизменяется текущий рабочий каталог, как объяснено в ответе Лекенштейна.
Петр Доброгост
1
Нет - посмотрите на исходный вопрос - последний аргумент - это абсолютный путь.
Symcbean
Ну и что? Оба экземпляра ~ раскрываются, и весь вызов работает не так, как ожидалось, только потому, что последний аргумент в случае использования -Cдолжен был быть задан как относительный путь, а вместо этого задан как абсолютный путь. Использование ~ здесь не имеет значения вообще.
Петр Доброгост
11

-C new_cwdизменяет текущий рабочий каталог на new_cwd. Следующие аргументы затем оцениваются относительно new_cwd.

tar czf ~ / files / wp / my-page-order.tar.gz -C ~ / webapps / zers / wp-content / plugins / my-page-order

Lekensteyn
источник
4

Решение без GNU, если tarнет -zвозможности, просто упомянуть:

pushd ~/files/wp; tar cvf - my-page-order | gzip > my-page-order.tar.gz && rm -rf my-page-order; popd

РЕДАКТИРОВАТЬ (с &&и без rm):

pushd ~/files/wp && tar cvf - my-page-order | gzip > my-page-order.tar.gz && popd
Mattia72
источник
(1) Вопрос ничего не говорит о rm; почему вы включаете это в свой ответ? (2) Ваш ответ архивирует неправильный каталог. (3) Почему вы изменились tar -zна tar | gzip? (4) Пока вы собираетесь использовать &&, вам, вероятно, следует использовать и &&после pushd.
G-Man говорит: «Восстанови Монику»
(1) Вы правы (2) на самом деле? Какой хороший? (3) в этом суть: версия tar, не относящаяся к GNU (например, в Unix), не имеет -z (4) я бы, вероятно, использовал &&в скрипте, но я думаю, что это не обязательно в «одном лайнере»
Mattia72
(2) OP хочет архивировать ~/webapps/zers/wp-content/plugins/my-page-orderс выводом на ~/files/wp/my-page-order.tar.gz; ваша команда архивов ~/files/wp/my-page-order. (3) Спасибо за редактирование вашего ответа, чтобы объяснить, почему вы использовали gzip.
G-Man говорит «Восстановить Монику»