Bash

如何以零大小鏡像目錄結構和文件?

  • December 28, 2020

我正在嘗試鏡像特定目錄的目錄*和文件結構。*但是,我希望鏡像文件沒有大小。例如,如果我有以下目錄樹:

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

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