Fcmp er programmet som finner ut om filer er like. Det sammenlikner byte for byte på en smart måte som sørger for at det leser minst mulig av hver fil og aldri samme byte to ganger. På tross av effektiviteten kan det altså finne enhver sammensetning av like filer blant en mengde filer.
| Kildekode: | C |
| Operativsystem: | Linux i hvert fall |
| Forfatter: | Andreas Nordal |
| Testmaskin: | Linux 2.6.11-6mdk, gcc 3.4.3 |
Merk: Versjon 4.1 er nå ute. Det er kun små justeringer, men den lite brukervennlige tabellen er nå erstattet. Denne siden kommer derfor til å oppdateres snart. Følg med. Samtidig har jeg lagt til en presisering i kommentaren til kildekoden til versjon 4.
Oppdatering: Det er en feil i fcmp som gjør at det ikke jobber like effektivt som det skal. Problemet er at det ikke slutter å lese filer som det egentlig vet at det kan slutte å lese. Dette betyr bare at det tar lang tid å sammenlikne mange store filer.
Det som ikke er så intuitivt med dette programmet er måten det presenterer resultatet på, nemlig med en tabell. Programmet bruker tabellen til å holde rede på filene, og skriver den bare til "standard ut" før det avslutter. Dette programmet har faktisk vist seg vanskelig å lage. Det høye versjonsnummeret skyldes at jeg har startet på nytt 4 ganger. Da jeg først fant ut å bruke en tabell, ble programmet både fleksibelt og enkelt. Mye penere kildekode, fullstendig språknøytralt (bortsett fra hjelpeteksten), og nå virker det altså som det skal.
Siden det er litt unødvendig å ta bilde av et terminalprogram, har jeg kopiert teksten denne gangen. Merk: Her vises versjon 4.0 i aksjon.[nordal@m107k bin]$ fcmp -h fcmp-4.0 -Finner ut om filer er like. Bruk: fcmp fil1 fil2 ... I tabellen som kommer symboliserer bokstaven x likhet mellom to filer. For eksempel betyr x i rad 1 kolonne 2 at fil1 og fil2 er like. Les tabellen vannrett. Tabellens nedre venstre halvdel betyr ikke noe. fcmp sammenlikner en byte om gangen fra hver fil med enhver annen fil, byte for byte, helt til likhetene tar slutt. Hvis tabellen sier at filer er like seg selv, betyr det at fcmp ikke leste resten av dem etter at alle likheter tok slutt. Tallet under tabellen er antall byte som filene maksimalt hadde til felles. [nordal@m107k bin]$ fcmp tekst tekst~ fcmp.html fcmp.html~ o o o o o o o o o o x o o o o x 1287 B [nordal@m107k bin]$ cp fcmp.html fcmp.html~ cp: overwrite «fcmp.html~»? y [nordal@m107k bin]$ fcmp tekst tekst~ fcmp.html fcmp.html~ o o o o o o o o o o o x o o o o 2026 B [nordal@m107k bin]$ ls -l fcmp.html -rw-rw-r-- 1 nordal nordal 2026 aug 19 13:40 fcmp.html |
| Kildekode: | Linux i386: | Sist oppdatert: |
| [ fcmp-4.c ] | [ fcmp-4.gz ] | 19/08 2007 |
| [ fcmp-4.1.c ] | [ fcmp-4.1.gz ] | 30/09 2007 |