Я хочу, чтобы tar X каталог не включая его родителей

9
tar cvf /var/lib/backup/sample.tar /home/user/.project

Тем не менее, когда я извлекаю, я получаю его родителей, а также

/backup/
  - /home/
     - /user/
        - .project/

Эта команда tar выполняет свою работу, потому что она не включает ничего в свои родительские объекты (например, в другие папки user).

Я хочу сделать это программно, поэтому изменение текущего рабочего каталога на /home/user/самом деле не вариант. Возможно ли это сделать?

User007
источник

Ответы:

17

Вы можете использовать эту -Cопцию, чтобы перейти в /home/userкаталог перед tarring, или использовать --strip-components 2при извлечении.

tar cvfC /var/lib/backup/sample.tar /home/user .project
#                              Note the space ^
tar cvf /var/lib/backup/sample.tar /home/user/.project
tar Cxf /backup /var/lib/backup/sample.tar --strip-components 2
Kevin
источник
1
+1 круто ... Я только что нашел -Cпереключатель, когда просматривал справочную страницу , но не мог понять этого ... звучало для меня больше похоже на то, как его будут использовать во время унтара. Узнал что-то новое.
Левон
@Kevin Спасибо. Опция C работает без нареканий. Спасибо!
User007
2
Я не мог заставить это работать так Согласно прочтению gnu.org/software/tar/manual/tar.html#SEC118 мне удалось получить следующую форму: tar cvf /var/lib/backup/sample.tar -C / home / user .project
Aivar
2

Я думаю, что если вы cdперейдете в каталог верхнего уровня, из которого вы хотите создать tarфайл, у вас не должно быть этой проблемы. То есть,

cdдо userи tarвверх .project.. вы можете указать место назначения для файла tar в /var/... как и раньше.

Или есть причина , вы не хотите / не могу cdк user?

Левон
источник
Да. Это было бы одно решение. Спасибо. Но я надеюсь, что есть лучший способ? Я хочу иметь дело с этим программным союзником, и я не хочу выпускать os.chdir(base_dir)в моем коде все время :), поэтому было бы хорошо, если есть выход из этого. Спасибо
User007
@ User007 Ах .. ладно, понятно. Вы можете обновить свой вопрос, чтобы включить это требование. Хороший идентификатор пользователя, кстати :)
Левон
Спасибо. Да. Я только что обновил свой вопрос. О, это чтобы скрыть мою личность ...
User007
1
@ User007 люблю партию 007 .. и похоже, что ты тоже работаешь в Python (это еще один из моих любимых)
Левон
:) Да. Хорошо, наш друг Kevinпомог мне с правильной командой. Поэтому я дам ему галочку. Но я проголосовал за тебя. Спасибо!
User007