基本上我只想tar目录中的所有文件,但不能获取存档中的所有父目录。
我已经尝试过-C,但我想我没有正确使用它。
tar -cjf archive.tar.bz2 -C /var/some/log/path ./*
这会导致tar尝试添加CWD中的所有文件。使用完整路径作为最后一个参数不会阻止添加目录。
看似简单,但无法弄明白。不知何故,tar不会将./ *作为相对于-C的焦点,尽管它应该更改为该目录。
帮助表示赞赏。
答案 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)
有一种更简单的方法可以做到这一点:
cd
到你想成为顶级的目录,即......
cd /var/lib/mysql
从tar命令中删除父目录
/var/lib/mysql/DATABASE_NAME
变为DATABASE_NAME
更多详细信息,请参阅this blog writeup。