如何將資料夾A中的隱藏檔案和隱藏子目錄(以點開頭的)複製到資料夾B?例如,如果我有這樣的結構:
A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c
我想將A中的隱藏檔案和隱藏子目錄複製到B:
B/.a
B/.b/
B/.b/somefile
B/.b/.c
我已經嘗試過這個命令:cp A/.* B
來自這個另一個超級用戶問題。但是,它不會複製子目錄。也嘗試過cp -r A/.* B
,但它會複製.
,所以我以 A 的精確副本結束(包括普通文件)。任何幫助表示讚賞。
答案1
例如,只要您只想查找 A 層級的隱藏檔案和資料夾並且不想要
A/b/.hidden
要複製,您應該能夠使用:
cp -r A/.[^.]* B
它基本上意味著複製以 a 開頭的任何內容.
,然後複製 a 以外的任何字元.
過濾掉.
並..
編輯:從 cp 命令中刪除了 -p,因為 Asker 沒有表示他想要保留任何所有權、日期等。
答案2
問題A/.*
是存在也與模式相符的.
目錄。A
您可以開啟擴充的 glob 模式並使用以下內容:
shopt -s extglob
cp -r A/.!(?(.)) B
它匹配名稱以點開頭且第二個字元既不是點也不是空的文件( ?(.) 不匹配任何內容或點,!(...) 否定它,即!(?(.)) 匹配其他所有內容比沒有或一個點)。
答案3
find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;
基本語法如下:
find A/ -type f
:find
目錄中A/
類型為檔案(而非目錄)的項目...-maxdepth 1 -name '.*'
:對於maxdepth
1 個以 .name
開頭的目錄.
。-exec cp -p {} B/ \;
:一旦找到這些文件,帶有標誌的命令exec
將保留從來源 ( ) 到目標的日期/時間。cp
-p
{}
B/
我喜歡使用maxdepth
新增控制層,這樣我就不會意外地複製整個檔案系統。但請隨意刪除它。
答案4
作為替代方案,如果第二個字元是字母數字(來源):
cp -r A/.[a-zA-Z0-9]* B