我通常这样做:
tar -czvf my_directory.tar.gz my_directory
如果我只想在my_directory中包含所有内容(包括任何隐藏的系统文件),而不包括目录本身,该怎么办?我不想:
my_directory
--- my_file
--- my_file
--- my_file
我想要:
my_file
my_file
my_file
我通常这样做:
tar -czvf my_directory.tar.gz my_directory
如果我只想在my_directory中包含所有内容(包括任何隐藏的系统文件),而不包括目录本身,该怎么办?我不想:
my_directory
--- my_file
--- my_file
--- my_file
我想要:
my_file
my_file
my_file
当前回答
cd my_directory/ && tar -zcvf ../my_dir.tgz . && cd -
应该在一条线上完成工作。它也可以很好地处理隐藏文件。“*”不会通过路径名展开隐藏文件,至少在bash中是这样。下面是我的实验:
$ mkdir my_directory
$ touch my_directory/file1
$ touch my_directory/file2
$ touch my_directory/.hiddenfile1
$ touch my_directory/.hiddenfile2
$ cd my_directory/ && tar -zcvf ../my_dir.tgz . && cd ..
./
./file1
./file2
./.hiddenfile1
./.hiddenfile2
$ tar ztf my_dir.tgz
./
./file1
./file2
./.hiddenfile1
./.hiddenfile2
其他回答
如果使用bash,这可能是最简单的答案。 使用shopt -s dotglob, bash命令将:
不包括根目录。 将包含根目录中的隐藏文件。
cd my_directory
shopt -s dotglob
tar -czvf ../my_directory.tar.gz *
shopt -u dotglob
(来自https://stackoverflow.com/a/9776491/7726468)
测试这个解决方案:
cd my_directory
tar zcvf ../my_directory.tar.gz *
你也可以像往常一样创建存档并提取它:
tar --strip-components 1 -xvf my_directory.tar.gz
cd my_directory && tar -czvf ../my_directory.tar.gz $(ls -A) && cd ..
这个方法对我很有用,它包含了所有隐藏文件,而不用把所有文件放在一个名为“。”的根目录中,就像tomoe的回答:
tar -C my_dir -zcvf my_dir.tar.gz `ls my_dir`