使用时,find . -type d
它会从搜索中排除父目录或子文件夹中的所有文件。我想将其扩展为 a-exec cp -p
或rsync "{}" destination \;
以便仅复制文件夹,不包括所有文件夹和子文件夹中的文件。我只知道如何通过扩展名排除,例如 .pdf 或 .jpg,但是如果我有多种文件和数百个目录怎么办?我应该如何处理这个问题?
谢谢
答案1
find
+ mkdir
+touch
正如评论中提到的可以工作
find . -type d -exec sh -c 'dir="{}"; mkdir -p "destination/$dir" && touch -cr "$dir" "destination/$dir"' \;
提到的 Ipor 命令touch -r <olddir> <newdir>
从 olddir 获取修改时间(不更改 olddir),并在 newdir 上设置相同的时间。如果添加-c
还可以确保它不会意外创建新文件。必须在源目录中运行,因为它期望 find 打印相对路径。由于它为每个目录生成一个 shell,这使得速度有点慢,您可能更喜欢下面的替代方案。
选择:
cp --attributes-only -pr ./ destination && find destination -type f -empty -delete
它将cp
递归地“复制”所有文件和目录,保留其时间戳,但不复制其中的内容。因此它很快。不像跳过文件创建时那么快,但很快。然后find
删除空文件并留下目录结构。