比较Linux中两个不同目录中的文件

问题描述 投票:0回答:3

一个 shell 脚本,显示两个不同目录中多个文件的差异,还可能创建一个输出文件,包括发现所有不匹配的位置。

状况

  1. 文件 dir1/file1 仅与 dir2/file1 比较(其他文件类似 - file2 与 file2 比较)

  2. 如果发现任何更改:状态应为“例如,在文件 file1 中发现未匹配”,并且所有其他文件也应执行相同的操作,并将所有结果写入一个文件

提前致谢

linux bash shell unix file-diffs
3个回答
6
投票

使用 diff 命令。使用

-r
标志,您可以递归比较文件夹:

diff -ur dir1 dir2

输出将采用

patch
命令理解的格式。您可以将其保存在文件中并使用
 将这些更改应用到 
dir1

diff -ur dir1 dir2 > my.patch
cd dir1
patch -p1 < ../my.patch

0
投票

如果您处理文本文件并且只想查看差异,我会自定义 diff 输出,如 hek2mgl 建议的那样。但如果您想要更多控制,例如在找到不同文件后执行一些命令或者必须比较二进制文件,您可以使用

find
cmp

以下是示例,您可以自定义:

#!/bin/bash
IFS_SAVE="$IFS"
IFS=$'\x0a'

for f in $(find dir1 -type f -printf "%f\n"); do {
    f1="dir1/$f"
    f2="dir2/$f"
    cmp --quiet "$f1" "$f2"
    check=$?
    if [ $check -eq 0 ] ; then
        echo -e "OK: $f"
    elif [ $check -eq 1 ] ; then
        echo -en "Mismatch FOUND in files: "
        filesize1=$(stat --printf="%s" "$f1" )
        filesize2=$(stat --printf="%s" "$f2" )
        echo "$f1" size:"$filesize1" "$f2" size:"$filesize2" check:"$check" 
        #you may put diff ... or anything else here
    else 
        echo "cannot compare files, probably $f2 is missing"
    fi
} ; done
IFS="$IFS_SAVE"

根据您的情况(如果文件名不包含空格、没有丢失文件等),您可以省略某些部分 - 这只是根据较大的脚本定制的。


-1
投票

Kodi Linux“开箱即用”不支持 cmp 或 diff。

有人知道如何在 Kodi 命令行上比较文件吗?

提前感谢...

最诚挚的问候, 保罗·弗林特,导演 巴雷开放系统研究所

© www.soinside.com 2019 - 2024. All rights reserved.