Предотвратить отсылку родительских каталогов - PullRequest
6 голосов
/ 27 октября 2010

По сути, я просто хочу сохранить все файлы в каталоге, но не получить все родительские каталоги в архиве.

Я пробовал -C, но я не правильно его использую.

tar -cjf archive.tar.bz2 -C /var/some/log/path ./*

В результате tar пытается добавить все файлы в CWD.Использование полного пути в качестве последнего аргумента не препятствует добавлению каталогов.

Кажется достаточно простым, но не может понять это.Как-то tar не относится к tar ./* относительно -C, хотя должен измениться на этот каталог.

Помощь оценена.

Ответы [ 2 ]

11 голосов
/ 27 октября 2010

Родительский каталог (/var/some/log) включен, так как /var/some/log/path/.. включается, когда вы делаете ./*.Попробуйте просто сделать

tar -cjf archive.tar.bz2 -C /var/some/log/path .

Тестовый прогон:

$ find tmp/some_files
tmp/some_files
tmp/some_files/dir1
tmp/some_files/dir1/dir1file
tmp/some_files/hello
tmp/some_files/world
tmp/some_files/dir2
tmp/some_files/dir2/dir2file
$ tar -cvjf archive.tar.bz2 -C tmp/some_files/ .
./
./dir1/
./dir1/dir1file
./hello
./world
./dir2/
./dir2/dir2file
$ cd tmp/unpacked
/tmp/unpacked$ mv /home/aioobe/archive.tar.bz2 .
/tmp/unpacked$ tar -xvjf archive.tar.bz2 
./
./dir1/
./dir1/dir1file
./hello
./world
./dir2/
./dir2/dir2file
/tmp/unpacked$ ls
archive.tar.bz2  dir1  dir2  hello  world
/tmp/unpacked$ 
0 голосов
/ 18 апреля 2011

Есть гораздо более простой способ сделать это:

  1. cd до каталога, в котором вы хотите быть верхнего уровня, т.е. ..

    cd /var/lib/mysql

  2. Удаление родительских каталогов из команды tar

    /var/lib/mysql/DATABASE_NAME становится просто DATABASE_NAME

Более подробную информацию можно найтив этом блоге .

...