仅对隐藏目录(或文件 + 目录)进行 Tarring-gzip 压缩

仅对隐藏目录(或文件 + 目录)进行 Tarring-gzip 压缩

基于, 可以使用 tar 当前目录中的所有隐藏文件

ls -A | egrep '^\.' | tar cvf ./test.tar -T -

但是,如何才能只 tar 所有隐藏目录或当前目录中的所有隐藏目录和文件呢?

基于ls -ap | egrep "^\..*/$" | tar -zcvf hiddens.tar.gz -T -应该可以解决问题。但事实并非如此。此命令只是创建一个空的 tar.gz 存档。所以 tar 通过这个命令根本看不到任何目录。

答案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 也可以与fishshell、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导致.并且..永远不会在全局扩展中返回,您可能希望始终启用的选项因为具有...包含从来没有用)。

相关内容