создание tar архивирует без включения родительского каталога

На самом деле, небольшая модификация к плану warl0ck (потому что я параноик),

  1. создайте новый раздел
  2. загрузитесь к однопользовательскому режиму
  3. смонтируйте новый раздел как /new_var или что-то и rsync, как описано
    • Вы могли бы также работать aptitude autoclean прежде, чем выполнить rsync, уменьшать сумму, скопированную по (или даже ... clean если Вы не возражаете повторно загружать свой способный кэш),
  4. переместиться /var кому: /old_var таким образом, Вы не теряете его сразу же и затем монтируете новый раздел как /var

    • могут быть живые журналы или изодромные с предварением файлы в old_var - если Вы не возражаете проигрывать, независимо от того, что изменено начиная с перезапуска можно проигнорировать их
  5. отредактируйте fstab, таким образом, новый раздел смонтируется как /var на будущих начальных загрузках и перезагрузке к нормальному многопользовательскому режиму

  6. если все, что подходило, Вы можете sudo rm -fr /old_var когда Вы уверены, что это работает. Если что-нибудь повреждается, Вы все еще имеете old_var вокруг
64
17.11.2014, 04:05
3 ответа

Вы можете использовать -C опцию tar, чтобы выполнить это:

tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir

Из man-страницы tar:

-C directory
         In c and r mode, this changes the directory before adding the following files.  
         In x mode, change directories after opening the archive but before extracting 
         entries from the archive.
80
27.01.2020, 19:32

Существует два метода, которые вы можете использовать для подхода этой проблемы.

Первый, на мой взгляд, легче. Просто CD в каталог непосредственно над тем, кого вы хотите сжать. В этом случае это будет dir2 .

$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir

Второй способ состоит в том, чтобы использовать опцию - преобразование , которое требует экспрессии SED и запускает его к именам файлов. Примечание: вам придется сбежать / в SED .

$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
11
27.01.2020, 19:32

Чтобы избежать этого каталога точек, вы можете удалить его постфактум:

tar czC /path/to/dir. --transform='s,^\./,,' >| foo.tgz

Будет создан архив только с содержимым из /path/to/dir.

2
27.07.2020, 04:49

Теги

Похожие вопросы