首页 文章

差异文件存在于两个不同的目录中

提问于
浏览
248

我有两个目录具有相同的文件列表 . 我需要使用 diff 命令比较两个目录中的所有文件 . 是否有一个简单的命令行选项,或者我是否必须编写一个shell脚本来获取文件列表然后迭代它们?

7 回答

  • 3

    diff 不仅可以比较两个文件,还可以通过使用 -r 选项遍历整个目录树,递归地检查子目录和每个树中可比较点上发生的文件之间的差异 .

    $ man diff
    
    ...
    
    -r  --recursive
            Recursively compare any subdirectories found.
    
    ...
    
  • 351

    您可以使用 diff 命令:

    diff -bur folder1/ folder2/
    

    这将输出一个忽略空格的递归diff,具有统一的上下文:

    • b flag表示忽略空格

    • u flag表示统一的上下文(前后3行)

    • r flag表示递归

  • 90

    如果您只想查看不同的文件,可以使用:

    diff -qr dir_one dir_two | sort
    

    选项“q”仅显示不同的文件但不显示不同的内容,“sort”将按字母顺序排列输出 .

  • 17

    Diff有一个选项 -r 就是为了做到这一点 .

    diff -r dir1 dir2

  • -2

    如果它是GNU diff,那么你应该只能将它指向两个目录并使用-r选项 .

    否则,请尝试使用

    for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
    

    注:正如Dennis在评论部分所指出的,你实际上并不需要在ls上执行命令替换 . 我已经这么做了很长时间以至于我在自动驾驶仪上做了很多这样的事情并且用我需要的命令来获取我的文件列表以进行比较 .

    另外我忘了补充一点,我确实要暂时禁用我的别名ls到GNU ls,这样我就会丢失GNU ls返回的列表中的颜色格式信息 .

  • 0

    这是一个脚本,用于显示两个文件夹中文件之间的差异 . 它以递归方式工作 . 改变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" )
    
  • 10

    试试这个:

    diff -rq /path/to/folder1 /path/to/folder2
    

相关问题