答案1
通常不鼓励在 shellscript 或复杂的命令行中使用,ls
因为结果可能难以预测。
find
当您的当前目录是您的主目录时,以下命令应该可以~
工作,,
cd ~
该命令只会获取隐藏文件
LC_ALL=C find -mindepth 1 -maxdepth 1 -type f -name '.*' -print0 | tar --null -cvzf hidden-files.tar.gz -T -
该命令将“仅”获取隐藏的目录树(包括子目录和文件)
LC_ALL=C find -mindepth 1 -maxdepth 1 -type d -name '.*' -print0 | tar --null -cvzf hidden-dirs.tar.gz -T -
请注意,如果目录树中有符号链接,可能会出现意外结果。
答案2
在 中zsh
,压缩所有隐藏目录(及其内容):
tar zcf file.tar.gz .*(/)
(请注意,该标准.*/
与 zsh 不同,.*(/)
因为它还包含符号链接,并且在某些tar
实现中,因为 a/
附加到 glob 扩展产生的路径中,会将它们打包为目录(及其所有内容),而不是符号链接,所以可能不是您想要的;另请参阅下面关于.
和在许多 shell 中的注释..
)。
要压缩隐藏目录和常规文件:
tar zcf file.tar.gz .*(/,.)
压缩所有隐藏文件,无论其类型如何(目录、常规、符号链接、fifos...)
tar zcf file.tar.gz .*
该 shell 也可以与fish
shell、mksh 或基于 Forsyth shell 的其他 shell 一起使用,但不能与大多数其他 shell 一起使用,因为这些其他 shell 确实包含.
并..
包含在该 glob 的扩展中。
但是ksh93
,您可以执行以下操作:
(FIGNORE='@(.|..)'; tar zcf file.tar.gz .*)
和bash
:
(shopt -s dotglob failglob; tar zcf file.tar.gz [.]*)
或者使用 bash 5.2 或更高版本:
(shopt -s globskipdots failglob; tar zcf file.tar.gz .*)
(globskipdots
导致.
并且..
永远不会在全局扩展中返回,您可能希望始终启用的选项因为具有.
并..
包含从来没有用)。