24

taron a directorymydir将归档隐藏文件和隐藏的子目录,但使用通配符 tar不会。这是已知的不一致还是错误?mydir*

编辑:附加信息。tar内部 mydir使用*通配符将不会“看到”或归档直接目录中的隐藏文件和隐藏子目录。但是,在非隐藏子目录中的mydir隐藏文件和隐藏子目录会被归档。换句话说,在目录树的更深处,隐藏的对象将被归档。

4

7 回答 7

35

使用通配符将不起作用。您必须指定 . (当前目录)如果您的意思是包括隐藏文件的完整目录。你可以做

tar -cvpzf test.tgz .
于 2011-01-01T02:20:22.137 回答
9

答案是*通配符由 shell 处理,它只是不会扩展到以点开头的东西。另一个通配符?也不会扩展到以点开头的东西。感谢 Keith 指出它是执行扩展的外壳,因此它与tar.

如果您使用shopt -s dotglob,则扩展将包括.filename. 感谢安迪。

用于shopt -u dotglob将其关闭。

切换dotglob选项本身不会改变ls。相反,它只是改变扩展行为,如ls *.

编辑:我的建议在下面的评论中。

于 2012-01-21T05:15:13.020 回答
7

您可以使用:

tar -cvpzf test.tgz * .??*

但是,这仅适用于名称 > 2 的隐藏文件(以防止 '.' 和 '..')

于 2014-01-28T11:03:02.763 回答
4

您可以使用以下方法压缩当前目录(包括 .hidden)中的所有文件/文件夹:

tar -zcvf compressed.tgz `ls -A -1`

最后一个参数是您要压缩的文件夹。如果你传递它ls -A -1,你将传递它当前目录中的所有文件夹,.... 对于子目录,默认情况下 .hidden 文件已经包含在压缩中。

于 2016-01-02T12:37:45.390 回答
3

shell 扩展了通配符,因此 tar 甚至看不到它。如果你想这样做,你必须明确地添加它们。( .*)。但是,最常见的做法是对单个目录进行 tar,以便在解压缩时将所有目录都放到同一个位置。

于 2011-01-01T02:20:38.657 回答
1
shopt -s dotglob

这将使

于 2011-11-21T19:29:44.363 回答
-1

这将压缩所有隐藏的文件和目录

tar -cvzf hidden.tgz `ls -a | egrep [.][^.]+`
于 2022-01-20T01:45:36.590 回答