Regular-Expression

Tarring-gzipping 僅隱藏目錄(或文件 + 目錄)

  • November 8, 2021

基於,可以使用 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 .*

它也可以與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 [.]*)

通常不鼓勵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 -

請注意,如果目錄樹中有符號連結,可能會出現意外結果。

引用自:https://unix.stackexchange.com/questions/676561