![](/img/trans.png)
[英]linux (red hat) compare directories and copy over files that are different
[英]Compare files in two different directories in Linux
一個Shell腳本,它顯示兩個不同目錄中多個文件的差異,並且還可能創建一個包含所有不匹配項的輸出文件。
條件
文件dir1 / file1僅與dir2 / file1比較(其他文件類似-file2與file2比較)
如果發現任何變化:狀態應為“例如文件file1中未找到匹配項”,所有其他文件也應執行相同操作,並將所有結果寫入一個文件中
提前致謝
使用diff命令。 使用-r
標志,您可以遞歸比較文件夾:
diff -ur dir1 dir2
輸出將采用patch
命令可以理解的格式。 您可以將其保存在文件中,然后使用以下命令將這些更改應用於dir1
diff -ur dir1 dir2 > my.patch
cd dir1
patch -p1 < ../my.patch
如果要處理文本文件,並且只想看一下差異,我將按照hek2mgl的建議自定義diff輸出。 但是,如果您想獲得更多控制權,例如在找到不同的文件后執行某些命令,或者必須比較二進制文件,則可以利用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"
根據您的情況(如果文件名不包含空格,沒有丟失的文件等),您可能會省略一些部分-這是從較大的腳本中剪裁而來的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.