我有两个具有相同文件列表的目录。我需要使用diff命令比较两个目录中存在的所有文件。是否有一个简单的命令行选项可以做到这一点,或者我必须编写一个shell脚本来获得文件列表,然后遍历它们?
当前回答
试试这个:
diff -rq /path/to/folder1 /path/to/folder2
其他回答
如果您特别不想比较文件的内容,而只是检查哪个文件不在两个目录中,您可以比较由另一个命令生成的文件列表。
diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'
-printf '%P\n'告诉find不要在输出路径前面加上根目录。
我还添加了sort,以确保在两次find调用中文件的顺序是相同的。
末尾的grep删除关于相同输入行的信息。
下面是一个脚本,显示两个文件夹中的文件之间的差异。它是递归的。修改dir1和dir2。
(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/} $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )
如果你只对不同的文件感兴趣,你可以使用:
diff -qr dir_one dir_two | sort
选项“q”将只显示不同的文件,而不显示不同的内容,“sort”将按字母顺序排列输出。
试试这个:
diff -rq /path/to/folder1 /path/to/folder2
Diff有一个选项-r,它的意思就是这样做。
"迪尔一德二
推荐文章
- 查看PS命令的全部输出
- 确保一次只运行一个shell脚本实例的快速方法
- 如何从命令行通过mysql运行一个查询?
- 在创建守护进程时执行双fork的原因是什么?
- 如何在Makefile中设置子进程的环境变量
- 如何让“wc -l”打印没有文件名的行数?
- 有效地测试Linux上的端口是否打开?
- 如何从另一个文件A中删除文件B中出现的行?
- 对以制表符分隔的文件进行排序
- Shell脚本删除超过n天的目录
- 如何检查shell脚本中是否存在命令?
- 如何使用查找命令从列表中查找所有具有扩展名的文件?
- 如何打破一个循环在Bash?
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- 如何合并2 JSON对象从2个文件使用jq?