我有兩個檔案名相同的檔案夾。如何在 bash 中進行校驗和以評估哪些檔案不同或相同?目前,我在下面撰寫了一個 bash 腳本,它構建相應的檔案名并對其執行“cksum”,每個校驗和生成兩個數字。但是我必須以某種方式為每條記錄保存這兩個數字并減去它們以查看哪個不匹配。
#!/bin/bash
folderOld="home/OldFiles/"
folderNew="home/NewFiles/"
for ((fileNumber=1;fileNumber<1000000;fileNumber ))
do
FileName="file${fileNumber}.dat"
OldFile=$folderOld$FileName
NewFile=$folderNew$FileName
cksum $OldFile
cksum $NewFile
done
uj5u.com熱心網友回復:
如果您只需要知道檔案是否不同,則無需計算校驗和。使用diff:
#!/usr/bin/env bash
folderOld="home/OldFiles/"
folderNew="home/NewFiles/"
for ((fileNumber = 1; fileNumber < 1000000; fileNumber )); do
FileName="file${fileNumber}.dat"
if diff -q "$folderOld$FileName" "$folderNew$FileName" >/dev/null; then
printf 'File %s is same in %s and %s\n' "$FileName" "$folderOld" "$folderNew"
else
printf 'File %s differs in %s and %s\n' "$FileName" "$folderOld" "$folderNew"
fi
done
uj5u.com熱心網友回復:
for i in {1..999999}; do
cmp {old/dir,new/dir}"/file$i.dat" || echo "file$i.dat: no match"
done
uj5u.com熱心網友回復:
你不需要減去數字,你只需要檢查它們是否相等:
OldSum=$(cksum $OldFile | cut -d' ' -f1)
NewSum=$(cksum $NewFile | cut -d' ' -f1)
if [[ $OldSum != $NewSum ]]; then
# Checksum mismatch, do something useful here
fi
我在cut -d' ' -f1這里用空格分割線,并取第一個欄位。所以檔案大小和檔案名被忽略。
順便說一句,cksum默認情況下使用 CRC32,這在這么多檔案上存在誤報的風險。更好地使用,例如,sha256sum.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445470.html
