cp AND rsync 从所有子目录中排除所有类型的所有文件,仅保留目录

cp AND rsync 从所有子目录中排除所有类型的所有文件,仅保留目录

使用时,find . -type d它会从搜索中排除父目录或子文件夹中的所有文件。我想将其扩展为 a-exec cp -prsync "{}" 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删除空文件并留下目录结构。

相关内容