我通常这样做:

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文件中的文件名是如何存储的,例如,./file1而不仅仅是file1。我发现,在使用此方法操作作为BuildRoot包文件的tarball时,这会导致问题。

一种解决方案是使用一些Bash glob列出除..之外的所有文件。是这样的:

tar -C my_dir -zcvf my_dir.tar.gz .[^.]* ..?* *

这是我从这个回答中学到的一个技巧。

现在如果没有文件匹配,tar将返回一个错误。?*或。[^。*,但它仍然可以工作。如果错误是一个问题(你正在检查一个脚本是否成功),这是有效的:

shopt -s nullglob
tar -C my_dir -zcvf my_dir.tar.gz .[^.]* ..?* *
shopt -u nullglob

虽然现在我们正在处理shell选项,但我们可能会决定使用* match隐藏文件会更整洁:

shopt -s dotglob
tar -C my_dir -zcvf my_dir.tar.gz *
shopt -u dotglob

这可能不适用于当前目录下的shell glos *,所以,或者,使用:

shopt -s dotglob
cd my_dir
tar -zcvf ../my_dir.tar.gz *
cd ..
shopt -u dotglob

其他回答

cd DIRECTORY
tar -czf NAME.tar.gz  *

星号将包括所有内容,甚至包括隐藏的内容

你也可以像往常一样创建存档并提取它:

tar --strip-components 1 -xvf my_directory.tar.gz
cd my_directory
tar zcvf ../my_directory.tar.gz *

如果使用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_dir && tar -czvf ../my_dir.tar.gz *