我需要区分两个目录:
A: /path1/
B: /path2/
Run Code Online (Sandbox Code Playgroud)
我想实现的是:
这种方法应该有效:
cd /path1
find . -type f -exec cmp -s {} /path2/{} \; -delete
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
find . -type f遍历当前目录 ( A ) 及其子目录中的所有文件。
cmp -s {} /path2/{}静默 ( -s) 将当前处理的文件 ( {}) 与B ( /path2/{}) 中的匹配文件进行比较。
如果文件相同,则 cmp 返回 true 并且-exec条件匹配。
如果-exec条件匹配,则-delete删除文件。
我建议在运行实际命令之前替换-deletewith-print以验证它是否按预期工作。
要处理剩余的空目录,可以执行以下命令:
find . -type d -exec rmdir -p {} \; 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
-type d 只找到目录。
-exec rmdir -p {} \;rmdir -p {}对找到的每个目录执行。
{}是已找到的目录,-p开关使 rmdir 也删除其空父目录。
2> /dev/null 抑制因尝试删除非空或以前删除的目录而产生的错误消息。
由于 rmdir 不能删除非空目录,这应该是最安全的方法。
| 归档时间: |
|
| 查看次数: |
1851 次 |
| 最近记录: |