Regular-Expression
Tarring-gzipping 僅隱藏目錄(或文件 + 目錄)
基於此,可以使用 tar 壓縮目前目錄中的所有隱藏文件
ls -A | egrep '^\.' | tar cvf ./test.tar -T -
但是,如何只 tar 僅所有隱藏目錄或目前目錄中的所有隱藏目錄和文件?
基於此,
ls -ap | egrep "^\..*/$" | tar -zcvf hiddens.tar.gz -T -
應該做的伎倆。然而事實並非如此。此命令只是創建一個空的 tar.gz 存檔。所以 tar 通過這個命令根本看不到任何目錄。
在
zsh
, 中 tar 所有隱藏的目錄(及其內容):tar zcf file.tar.gz .*(/)
(請注意,該標準
.*/
與 zsh 不同,.*(/)
因為它還包括符號連結,並且在某些tar
實現中,因為 a/
附加到由 glob 擴展產生的路徑,會將它們作為目錄(連同它們的所有內容)而不是符號連結,很可能不是您想要的;另請參閱下面關於.
和..
在許多 shell 中的註釋)。要 tar 隱藏目錄和正常文件:
tar zcf file.tar.gz .*(/,.)
對所有隱藏文件進行 tar,無論其類型如何(目錄、正常、符號連結、fifos …)
tar zcf file.tar.gz .*
它也可以與
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 [.]*)
通常不鼓勵
ls
在 shellscript 或複雜的命令行中使用,因為結果可能難以預測。
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 -
請注意,如果目錄樹中有符號連結,可能會出現意外結果。