防止父目录被涂焦

时间:2010-10-27 08:54:02

标签: shell tar

基本上我只想tar目录中的所有文件,但不能获取存档中的所有父目录。

我已经尝试过-C,但我想我没有正确使用它。

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

这会导致tar尝试添加CWD中的所有文件。使用完整路径作为最后一个参数不会阻止添加目录。

看似简单,但无法弄明白。不知何故,tar不会将./ *作为相对于-C的焦点,尽管它应该更改为该目录。

帮助表示赞赏。

2 个答案:

答案 0 :(得分:11)

包含父目录(/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$ 

答案 1 :(得分:0)

有一种更简单的方法可以做到这一点:

  1. cd到你想成为顶级的目录,即......

    cd /var/lib/mysql

  2. 从tar命令中删除父目录

    /var/lib/mysql/DATABASE_NAME变为DATABASE_NAME

  3. 更多详细信息,请参阅this blog writeup