Bash
如何以零大小鏡像目錄結構和文件?
我正在嘗試鏡像特定目錄的目錄*和文件結構。*但是,我希望鏡像文件沒有大小。例如,如果我有以下目錄樹:
original_folder ├── images │ ├── image1.jpg (2 MB) │ ├── image2.jpg (3 MB) ├── videos │ ├── video1.mp4 (300 MB) │ ├── video2.mp4 (400 MB)
我想要以下輸出:
mirrored_folder ├── images │ ├── image1.jpg (0 b) │ ├── image2.jpg (0 b) ├── videos │ ├── video1.mp4 (0 b) │ ├── video2.mp4 (0 b)
我嘗試在以下命令中使用
original_folder
:cd original_folder find . -name '*' -exec touch ../mirrored_folder/'{}' \;
但是,此命令嘗試執行
touch ../mirrored_folder/./images/image1.jpg
. 請注意使命令混亂的點。我怎樣才能實現我想要做的事情?
GNU
cp
(來自coreutils)可以做到這一點:cp -r --attributes-only original_folder/* mirrored_folder/
來自man cp:
--attributes-only
不要復製文件數據,只複製屬性
-R
,-r
,--recursive
遞歸複製目錄使用
find
命令作為 OP 說 xe 在 MacOS 上並且cp
命令沒有--attributes-only
選項:find original_folder/ -type d -exec \ sh -c 'mkdir -p mirrored_folder/${1#*/}' _ {} \; \ -o -type f -exec \ sh -c 'touch mirrored_folder/${1#*/}' _ {} \;
請注意,與保留其屬性(預設:模式、所有權、時間戳)
find
的解決方案不同,解決方案會創建新的目錄和文件。cp