Mai mult
Cel mai rapid mod de a spune dacă două fișiere sunt identice în Unix/Linux?
Am un script de shell în care am nevoie pentru a verifica dacă două fișiere sunt identice sau nu. Fac acest lucru pentru o mulțime de fișiere, și, în script-ul meu din diff
comanda pare a fi piedică performanță.
Aici's linia:
diff -q $dst $new > /dev/null
if ($status) then ...
Ar putea exista un mod mai rapid de a compara fișiere, poate un algoritm personalizat în loc de implicit diff
?
201
7
Eu cred
cmp
se va opri la primul octet diferența:Îmi place @Alex Howansky au folosit 'cmp-tăcut' pentru acest lucru. Dar am nevoie de atât pozitive, cât și negative răspuns, așa că am folosi:
Atunci eu pot rula acest lucru în terminal sau cu un ssh pentru a verifica fișierele împotriva unei constante de fișier.
De ce nu't ai hash de fișiere de conținut?
Încercați acest script, spunem, de exemplu script.sh și apoi rulați-l, după cum urmează: script.sh file1.txt file2.txt
Pentru fișierele care nu sunt diferite, orice metoda vei avea nevoie să fi citit ambele fișiere în întregime, chiar dacă a fost citit în trecut.
Nu există nici o alternativă. Deci, crearea de hash-uri sau sume de control la un moment dat în timp, necesită citirea întregului fișier. Fișiere mari ia timp.
Fișierul de metadate recuperarea este mult mai rapidă decât citirea unui fișier mare.
Deci, este acolo orice fișier de metadate, puteți utiliza pentru a stabili că fișierele sunt diferite? Dimensiune ? sau chiar rezultatele din fișierul de comandă care nu citi doar o mică parte din fișier?
Dimensiune exemplu fragment de cod:
Dacă fișierele sunt de aceeași mărime, apoi te-ai pricopsit cu dosar complet citește.
De asemenea, încercați să utilizați cksum comanda:
La cksum comandă va afișa numărul de octet din fișier. A se vedea 'om cksum'.
Pentru că nu mă pricep și nu't au suficient de puncte de reputație nu pot't adăugați această informație într-un comentariu.
Dar, dacă aveți de gând să utilizați
cmp comandă (și nu't nevoie/doresc să fie verbose) puteți apuca doar starea de iesire. Pe
cmp` om pagină:Deci, ai putea face ceva de genul:
Fac niste teste cu un Raspberry Pi 3B+ (I'm, folosind o suprapunere sistemul de fișiere, și aveți nevoie pentru a sincroniza periodic), am făcut o comparație pentru diff-q și cmp -s; rețineți că acest lucru este un jurnal din interiorul /dev/shm, astfel încât accesul la disc vitezele sunt o non-problema:
Am alergat-o de câteva ori. cmp -s avea în mod constant ușor mai scurte ori pe cutia de testare am folosit. Deci, dacă doriți să utilizați cmp -s pentru a face lucrurile între două fișiere....