我通常会这样做:
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
这也适用于带有空格或其他特殊字符的文件。做得好!
不完美-tar文件包含“。” 还有./file1而不只是file1。我喜欢下面的mateusza解决方案,在取消涂标时使用--strip-components。
@Ivan如果替换
.
为*
,则该命令将按cd my_directory/ && tar -zcvf ../my_dir.tgz * && cd ..
预期运行。@jmathew您还可以使用子外壳程序,以使当前外壳程序的工作目录不变:
$ (cd my_directory/ && tar -zcvf ../my_dir.tgz .)
我知道这是一个老答案,但是
cd
进入目录却很la脚。至少可以使用pushd
,popd
如果tar
没有类似的标志-C
。