我正在尝试镜像目录和特定目录的文件结构。但是,我希望镜像文件没有大小。例如,如果我有以下目录树:
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