tar
on a directorymydir
将归档隐藏文件和隐藏的子目录,但使用通配符的 tar不会。这是已知的不一致还是错误?mydir
*
编辑:附加信息。tar
从内部 mydir
使用*
通配符将不会“看到”或归档直接目录中的隐藏文件和隐藏子目录。但是,在非隐藏子目录中的mydir
隐藏文件和隐藏子目录会被归档。换句话说,在目录树的更深处,隐藏的对象将被归档。
tar
on a directorymydir
将归档隐藏文件和隐藏的子目录,但使用通配符的 tar不会。这是已知的不一致还是错误?mydir
*
编辑:附加信息。tar
从内部 mydir
使用*
通配符将不会“看到”或归档直接目录中的隐藏文件和隐藏子目录。但是,在非隐藏子目录中的mydir
隐藏文件和隐藏子目录会被归档。换句话说,在目录树的更深处,隐藏的对象将被归档。
使用通配符将不起作用。您必须指定 . (当前目录)如果您的意思是包括隐藏文件的完整目录。你可以做
tar -cvpzf test.tgz .
答案是*
通配符由 shell 处理,它只是不会扩展到以点开头的东西。另一个通配符?
也不会扩展到以点开头的东西。感谢 Keith 指出它是执行扩展的外壳,因此它与tar
.
如果您使用shopt -s dotglob
,则扩展将包括.filename
. 感谢安迪。
用于shopt -u dotglob
将其关闭。
切换dotglob
选项本身不会改变ls
。相反,它只是改变扩展行为,如ls *
.
编辑:我的建议在下面的评论中。
您可以使用:
tar -cvpzf test.tgz * .??*
但是,这仅适用于名称 > 2 的隐藏文件(以防止 '.' 和 '..')
您可以使用以下方法压缩当前目录(包括 .hidden)中的所有文件/文件夹:
tar -zcvf compressed.tgz `ls -A -1`
最后一个参数是您要压缩的文件夹。如果你传递它ls -A -1
,你将传递它当前目录中的所有文件夹,.
但..
. 对于子目录,默认情况下 .hidden 文件已经包含在压缩中。
shell 扩展了通配符,因此 tar 甚至看不到它。如果你想这样做,你必须明确地添加它们。( .*
)。但是,最常见的做法是对单个目录进行 tar,以便在解压缩时将所有目录都放到同一个位置。
shopt -s dotglob
这将使
这将压缩所有隐藏的文件和目录
tar -cvzf hidden.tgz `ls -a | egrep [.][^.]+`