簡體   English   中英

比較Linux中兩個不同目錄中的文件

[英]Compare files in two different directories in Linux

一個Shell腳本,它顯示兩個不同目錄中多個文件的差異,並且還可能創建一個包含所有不匹配項的輸出文件。

條件

  1. 文件dir1 / file1僅與dir2 / file1比較(其他文件類似-file2與file2比較)

  2. 如果發現任何變化:狀態應為“例如文件file1中未找到匹配項”,所有其他文件也應執行相同操作,並將所有結果寫入一個文件中

提前致謝

使用diff命令。 使用-r標志,您可以遞歸比較文件夾:

diff -ur dir1 dir2

輸出將采用patch命令可以理解的格式。 您可以將其保存在文件中,然后使用以下命令將這些更改應用於dir1

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

如果要處理文本文件,並且只想看一下差異,我將按照hek2mgl的建議自定義diff輸出。 但是,如果您想獲得更多控制權,例如在找到不同的文件后執行某些命令,或者必須比較二進制文件,則可以利用findcmp
下面是您可以自定義的示例:

#!/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"

根據您的情況(如果文件名不包含空格,沒有丟失的文件等),您可能會省略一些部分-這是從較大的腳本中剪裁而來的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM