Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Script voor vergelijken van inhoud van bestanden  (gelezen 10692 keer)

Script voor vergelijken van inhoud van bestanden
« Gepost op: 2011/11/06, 21:59:34 »
Ik ben niet heel erg gevorderd met scripten, maar ik heb een script nodig dat de inhoud van 2 bestanden kan vergelijken.
Voor bijv.: Een bestand bevat 'Dit is een bestand' en een ander bestand bevat: 'Dit is wat anders'
Dat er door het script dan word opgemerkt dat er iets anders is tussen die twee bestanden.
En hoe vormuleer je het dan als er een verschil is, dat er dan een ' echo ' komt?
Ik snap niet helemaal duidelijk wat ze hier bedoelen: http://tldp.org/LDP/abs/html/filearchiv.html#FILECOMP
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #1 Gepost op: 2011/11/06, 22:08:29 »
Misschien dat je iets duidelijker kan zijn over welk stuk van die code je niet snapt. Volgens mij kun je die code daar ook gewoon gebruiken. Als je die code opslaat in een bestandje, bijvoorbeeld vergelijk.sh en dan uitvoerbaar maakt chmod +x vergelijk.sh dan zou je het zo moeten kunnen uitvoeren: ./vergelijk.sh /pad/naar/bestand1 /pad/naar/bestand2

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #2 Gepost op: 2011/11/07, 07:38:18 »
Misschien dat je iets duidelijker kan zijn over welk stuk van die code je niet snapt. Volgens mij kun je die code daar ook gewoon gebruiken. Als je die code opslaat in een bestandje, bijvoorbeeld vergelijk.sh en dan uitvoerbaar maakt chmod +x vergelijk.sh dan zou je het zo moeten kunnen uitvoeren: ./vergelijk.sh /pad/naar/bestand1 /pad/naar/bestand2
Ja, dat snap ik, maar het gaat mij er meer om:
Hoe kun je in het script twee vaste locaties opgeven? Welke dingen moet je dan veranderen (in het script) voor de bestandslocatie?
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #3 Gepost op: 2011/11/07, 08:28:11 »
Ah zo. $1 en $2 moet je dan vervangen door je eigen variabelen. $1 en $2 zijn verwijzingen naar het eerste en tweede argument dat aan het script is meegegeven door de gebruiker. Als je de locaties hard in het script wil zetten dan moet je dat stukje over de argumenten weghalen, anders zal het scriptje toch precies 2 argumenten verwachten. Volgens mij volstaat het onderstaande in jouw geval:

bestand1="iets.txt"
bestand2="ietsanders.bla"

cmp $bestand1 $bestand2 &> /dev/null

if [ $? -eq 0 ]
then
  echo "File \"$bestand1\" is identical to file \"$bestand2\"."
else  
  echo "File \"$bestand1\" differs from file \"$bestand2\"."
fi
Even te verduidelijking $? betekent de waarde van het laatst uitgevoerde commando.


Re: Script voor vergelijken van inhoud van bestanden
« Reactie #4 Gepost op: 2011/11/07, 08:48:19 »
Ok, thanks   :D
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Offline MKe

  • Lid
Re: Script voor vergelijken van inhoud van bestanden
« Reactie #5 Gepost op: 2011/11/07, 09:25:20 »
Ik ben niet heel erg gevorderd met scripten, maar ik heb een script nodig dat de inhoud van 2 bestanden kan vergelijken.
Voor bijv.: Een bestand bevat 'Dit is een bestand' en een ander bestand bevat: 'Dit is wat anders'
Dat er door het script dan word opgemerkt dat er iets anders is tussen die twee bestanden.
En hoe vormuleer je het dan als er een verschil is, dat er dan een ' echo ' komt?
Ik snap niet helemaal duidelijk wat ze hier bedoelen: http://tldp.org/LDP/abs/html/filearchiv.html#FILECOMP
Daar kun je toch gewoon het commando diff voor gebruiken dat standaard in linux voorkomt?
diff bestand1 bestand2

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #6 Gepost op: 2011/11/07, 10:16:54 »
Ik ben niet heel erg gevorderd met scripten, maar ik heb een script nodig dat de inhoud van 2 bestanden kan vergelijken.
Voor bijv.: Een bestand bevat 'Dit is een bestand' en een ander bestand bevat: 'Dit is wat anders'
Dat er door het script dan word opgemerkt dat er iets anders is tussen die twee bestanden.
En hoe vormuleer je het dan als er een verschil is, dat er dan een ' echo ' komt?
Ik snap niet helemaal duidelijk wat ze hier bedoelen: http://tldp.org/LDP/abs/html/filearchiv.html#FILECOMP
Daar kun je toch gewoon het commando diff voor gebruiken dat standaard in linux voorkomt?
diff bestand1 bestand2

Wat doet diff in dit geval beter dan cmp, wat TS al gevonden had? Diff kan meer dan cmp, maar TS wilde alleen maar weten of twee bestanden verschillen niet wat precies de verschillen zijn. Uit de link in de OP:
Citaat
The cmp command is a simpler version of diff, above. Whereas diff reports the differences between two files, cmp merely shows at what point they differ.

Offline MKe

  • Lid
Re: Script voor vergelijken van inhoud van bestanden
« Reactie #7 Gepost op: 2011/11/07, 10:47:23 »
Ik denk dat ik het idee achter het script niet snap. Als ik verschillen tussen bestanden wil zien gebruik ik rechtstreeks het commando diff of cmp zonder wrapper-script. Maar beter lezend zie ik dat hij een standaard vergelijking wil doen, altijd deezelfde bestanden. Dat zal dan wel de reden van een script zijn.

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #8 Gepost op: 2011/11/07, 19:02:23 »
Ik heb nog wel iets waar ik mee zit:
Hoe kun je bij 'wget' de naam veranderen?
Ik moet hebben dat een bepaalde pagina gedownload word in /tmp/
Dus iets van:
wget http://forum.ubuntu-nl.org/programmeren/script-voor-vergelijken-van-inhoud-van-bestanden/ /tmp/Maar dan nog dat de naam van het bestand vast staat.
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #9 Gepost op: 2011/11/07, 20:33:16 »
Brickmasterj.

Kijks eens of je aan de onderstande code van dienst kan zijn:
/usr/bin/wget -np -c www.watismijnip.be --output-document /tmp/index.html."$$" 2>/dev/null && export PRPID="$$"

De rest van vind je hier: -> http://users.telenet.be/x86_64/Scripts/IP-check.be
Dit scriptje staat bijmij onderaan in mijn verborgen .bashrc bestand.
Elke keer als een terminal open, zie ik beide IP-adressen.
Dus voor en na mijn router.

Voor meer info over wget: man wget in een terminal of -> http://linux.die.net/man/1/wget
MvG,
MauRice
Registered Linux user: 473556

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #10 Gepost op: 2011/11/07, 21:50:56 »
Brickmasterj.

Kijks eens of je aan de onderstande code van dienst kan zijn:
/usr/bin/wget -np -c www.watismijnip.be --output-document /tmp/index.html."$$" 2>/dev/null && export PRPID="$$"

De rest van vind je hier: -> http://users.telenet.be/x86_64/Scripts/IP-check.be
Dit scriptje staat bijmij onderaan in mijn verborgen .bashrc bestand.
Elke keer als een terminal open, zie ik beide IP-adressen.
Dus voor en na mijn router.

Voor meer info over wget: man wget in een terminal of -> http://linux.die.net/man/1/wget
Danku wel! Het ging eigenlijk vooral om dit:
wget -np -c www.site.com --output-document /tmp/index.html
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #11 Gepost op: 2011/11/07, 22:05:20 »
Als we dan toch zo doorgaan, heb ik nog wel een vraagje...  :D
Hoe kun, bij het opstarten van een script (in de terminal) vragen om een variabele?
Dus dat na het invoeren van de commend om het script te openen;
./home/joris/script.shIets van een vraag krijgt waar je een input variabele moet opgeven;
Input website: ...En dat dat dan later in het script weer opgevraagd kan worden, als $InputVar (ofzo, moet dat een vaste naam hebben, of kun je er ook bijv. $3 van maken? (3e input variabele))
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #12 Gepost op: 2011/11/07, 22:48:38 »
Je moet echt eens een handleiding of goede tutorial opzoeken, staan dit soort dingen allemaal in. Heb het net ook maar even opgezocht.  :D
read variabeledan kan je iets typen en met enter bevestigen.
vervolgens wordt het opgeslagen in de variabele "variabele" die je weer kan gebruiken als $variabele in de rest van je code.

Je kan dit soort dingen trouwens ook gewoon in de terminal invoeren om mee te spelen, hoef je geen aparte bestandjes voor aan te maken.

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #13 Gepost op: 2011/11/07, 23:30:32 »
Je moet echt eens een handleiding of goede tutorial opzoeken, staan dit soort dingen allemaal in. Heb het net ook maar even opgezocht.  :D
read variabeledan kan je iets typen en met enter bevestigen.
vervolgens wordt het opgeslagen in de variabele "variabele" die je weer kan gebruiken als $variabele in de rest van je code.

Je kan dit soort dingen trouwens ook gewoon in de terminal invoeren om mee te spelen, hoef je geen aparte bestandjes voor aan te maken.

Eigenlijk heb je gelijk, maar ik kan niet veel goede vinden :(
Maar ik zit nu met dit:
wget -np -c "$Input" --output-document /tmp/old.html

sleep 300

wget -np -c "$Input" --output-document /tmp/new.html

$1=/tmp/old.html
$2=/tmp/new.html

cmp $1 $2 &> /dev/null

if [ $? -eq 0 ]
then
  echo "Zelfde webpagina's"
else 
  echo "Verschil tussen webpagina's"
fi
En toch zegt ie de hele tijd: 'Kan bestand /tmp/new.html niet vinden: bestand/map bestaat niet' en 'Kan bestand /tmp/old.html niet vinden: bestand/map bestaat niet'
Waarom niet? Het staat er toch gewoon goed? En in de /tmp/ map staan die twee bestanden gewoon...
Bij $Input werd een website opgeven, die word dan dus gedownload, 5 min later nog een keer,
Maar dan krijg ik ineens die error? ???
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #14 Gepost op: 2011/11/07, 23:43:04 »
Waarom zet je $1 en $2 neer? dat is voor argumenten die je bij het aanroepen meegeeft aan het script. Daarnaast moet je bij het toewijzen van een waarde aan een variabele geen "$" gebruiken, dat is voor wanneer je de waarde van een variabele wil weergeven. Meer algemeen, $x betekent in bash gewoon "geef de waarde van x". Daarbij zijn een aantal speciale gevallen als $? voor het laatste commando en $nummer voor de meegegeven argumenten.

b1="blablabla"
b2="watzeggie?"

als je die waardes wil hebben gebruik je later $b1 en $b2


« Laatst bewerkt op: 2011/11/07, 23:47:12 door erik1984 »

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Script voor vergelijken van inhoud van bestanden
« Reactie #15 Gepost op: 2011/11/08, 04:57:22 »
http://tldp.org/LDP/abs/html/index.html

Veel lees- en programmeerplezier ;)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #16 Gepost op: 2011/11/08, 07:34:49 »
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #17 Gepost op: 2011/11/08, 08:20:10 »
Die had je al gevonden  :D In je eerste bericht verwijs je naar die handleiding.

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #18 Gepost op: 2011/11/08, 20:21:38 »
MvG,
MauRice
Registered Linux user: 473556

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Script voor vergelijken van inhoud van bestanden
« Reactie #19 Gepost op: 2011/11/08, 21:14:42 »
Als je het dan toch grafisch wil doen, vergelijk de bestanden en mappen dan direct met het programma "meld".
Die laat ook precies zien of er verschillen zijn en zo ja waar die dan zitten.

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #20 Gepost op: 2011/11/08, 21:23:41 »
Brickmasterj,

Als je je weg in bash kent...
Kan je het geheel verfraaien met behulp van oa zenity.
http://linux.byexamples.com/archives/259/a-complete-zenity-dialog-examples-1/
http://linux.byexamples.com/archives/265/a-complete-zenity-dialog-examples-2/
Thanks, dat is echt ongelofelijk handig!

Maar nu zit ik weer met een vraag xD:
In mijn script word gebruik gemaakt van een "if"
Bij 'then' wil ik dat hij de stappen vanaf de regel 8 herhaalt, oneindig.
Dus dat ie weer begint bij regel 8, net zo lang tot die "if" een keer naar 'else' moet (dan moet ie een 'zenity' tekstje laten zien).
Hoe vormuleer je dat?

En ik heb nu in mijn script "$site", "$bestand1" en "$bestand2".
Dit (volgens mij) de oorzaak van een probleem, omdat bij die "if" met [ $? -eq 0 ] wil ik dat ie ALLEEN $bestand1 en $bestand2 pakt, niet $site er ook nog bij, wat ie wel doet.
Hoe maak je van $? dan dat ie alleen $bestand1 en $bestand2 pakt?
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #21 Gepost op: 2011/11/08, 21:49:13 »


Maar nu zit ik weer met een vraag xD:
In mijn script word gebruik gemaakt van een "if"
Bij 'then' wil ik dat hij de stappen vanaf de regel 8 herhaalt, oneindig.
Dus dat ie weer begint bij regel 8, net zo lang tot die "if" een keer naar 'else' moet (dan moet ie een 'zenity' tekstje laten zien).
Hoe vormuleer je dat?


dat Formuleer je met een lus bijv while of for. type maar eens help while in bash in
URD - http://www.urdland.com - Usenet Resource Downloader

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #22 Gepost op: 2011/11/08, 22:07:32 »


Maar nu zit ik weer met een vraag xD:
In mijn script word gebruik gemaakt van een "if"
Bij 'then' wil ik dat hij de stappen vanaf de regel 8 herhaalt, oneindig.
Dus dat ie weer begint bij regel 8, net zo lang tot die "if" een keer naar 'else' moet (dan moet ie een 'zenity' tekstje laten zien).
Hoe vormuleer je dat?

dat Formuleer je met een lus bijv while of for. type maar eens help while in bash in
Ja, ik wist wel dat je (waarschijnlijk) iets met met 'while' moet maar, dit snap ik nog steeds niet.
Het gaat om dit stuk tekst:
wget -np -c "$site" --output-document /tmp/new.html

bestand1=/tmp/old.html
besatnd2=/tmp/new.html

cmp $bestand1 $bestand2 &> /dev/null

if [ $? -eq 0 ]
then
  *****  
else  
  zenity --info --text "Er zit verschil in!"
fi
Bij de ***** hoort te komen dat ie terug gaat naar regel 1 (in dit geval)...
Maar hoe zet je dat dan in een 'while'?

En zo als je ziet, hoe maak je van die '$?' dat ie niet ook nog '$site' pakt, maar alleen $bestand1 en $bestand2?
« Laatst bewerkt op: 2011/11/08, 22:10:09 door brickmasterj »
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #23 Gepost op: 2011/11/09, 19:40:34 »
zo uit mijn hoofd iets van:
val=0;
while  [ $val -eq 0 ]  ;  do

wget -np -c "$site" --output-document /tmp/new.html

bestand1=/tmp/old.html
besatnd2=/tmp/new.html

cmp $bestand1 $bestand2 &> /dev/null
val=$?
done

zenity --info --text "Er zit verschil in!"
kan ook met until of for.
Kijk eens naar help while

tweede vraag snap ik niet.. $? is de exit code van het laatst uitgevoerde commando, cmp in dit geval
URD - http://www.urdland.com - Usenet Resource Downloader

Re: Script voor vergelijken van inhoud van bestanden
« Reactie #24 Gepost op: 2011/11/09, 22:08:21 »
zo uit mijn hoofd iets van:
val=0;
while  [ $val -eq 0 ]  ;  do

wget -np -c "$site" --output-document /tmp/new.html

bestand1=/tmp/old.html
besatnd2=/tmp/new.html

cmp $bestand1 $bestand2 &> /dev/null
val=$?
done

zenity --info --text "Er zit verschil in!"
kan ook met until of for.
Kijk eens naar help while

tweede vraag snap ik niet.. $? is de exit code van het laatst uitgevoerde commando, cmp in dit geval

Maar hoe pas je in dit script aan dat er alleen op een ongelijkheid van 50 tekens word gelet?
Dus dat als er 46 verschillen in zitten, dat ie dan niet de lus afmaakt, maar gewoon door gaat?
Moet dat dan weer bij [ $val -eq 0 ]?
Workstation:
Dell Precision 690 Workstation
Dual Xeon X5365 Quad (8-Cores @3.0GHz)
64GB DDR2 R.A.M.
Sapphire Radeon HD 6570 (2GB GDDR3)

PC:
Dell OptiPlex 755
Intel Core 2 Duo E8400 (2-Cores @3,00Ghz)
4GB DDR2 R.A.M.
ATi Radeon HD 2400 XT (258MB GDDR2)

IGN: brickmasterj (of brickmaster-j)