bash - 如何在linux中通过比较删除两个目录中的相同文件?
问题描述
我想删除两个目录中的相同文件。两者都有很多同名的文件。如果两个文件相同,我想在第一个目录中删除。我不确定 linux shell 是更好的选择还是 python 会更好。
$HOME/bin
$HOME/cin
在某些搜索中,有一个比较接近的答案。
find cin -type f -exec cmp '{}' "bin/{}" \;
但这不起作用,因为find
{} 的第一个输出包含“cin/”目录名称,例如“cin/file1”。所以第二个“bin/{}”有“bin/cin/file1”。然后发生比较错误
cmp: bin/cin/file1: No such file or directory
如何比较 cin/file1 和 bin/file1?
解决方案
你可以使用这个find
命令:
find cin -type f -exec bash -c 'f="${1#cin/}"; cmp "cin/$f" "bin/$f"' _ {} \;
bash -c
它对目录中的所有常规文件执行内部命令cin
。
上层目录被 bash ism ${1#...}
删除,变量f
设置为相对路径。
推荐阅读
- node.js - Docker Node Alpine Image Build 在 node-gyp 上失败
- python - python3中的exec和defaultdict赋值
- testing - 基于角色和权限的网站进行测试
- javascript - 在 Protractor 测试中需要使用页面对象模型断言表单字段
- reactjs - 对象对象仅在生产中编译反应
- java - 如何在多模块架构(Java)中使用 Safeargs?
- bash - ImageMagick - 合并具有部分文件名匹配的文件
- sql - 在 Oracle 中从星期一开始按星期几对员工列表进行排序
- scala - 从构造函数中具有可变变量的类继承
- ios - 如何根据内在内容设置集合视图单元格的自动宽度大小?