如何镜像目录结构和零大小的文件?

如何镜像目录结构和零大小的文件?

我正在尝试镜像目录特定目录的文件结构。但是,我希望镜像文件没有大小。例如,如果我有以下目录树:

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.请注意使命令混乱的点。我怎样才能实现我想要做的事情?

答案1

GNUcp(来自核心工具)可以这样做:

cp -r --attributes-only original_folder/* mirrored_folder/

男人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保留其属性(默认值:模式、所有权、时间戳)的解决方案不同。

答案2

这似乎有效:

cd dest || exit
(cd orig && find . -type d -print0) | xargs -r0 mkdir -p
(cd orig && find . -type f -print0) | xargs -r0 touch

相关内容