[Linux Bash] Bestanden uit directory doorgeven?

Pagina: 1
Acties:

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Topicstarter
Een voorbeeld lijkt me het nuttigststst:

webalizer /var/log/httpd/nogwat/transfer.log*Jun*

Nu zou ik verwachten dat hij alle bestanden (dus 01, 02, 03 etc..) bestanden pakt. Echter, webalizer pakt (willekeurig) alleen 4 Juni.

Nu wil ik dus een manier om alle bestanden apart door te voeren aan webalizer.

Ik ben een linux leek, en weet dus niet hoe ik te werk moet gaan.. hulp gevraagd! :)

|_____vakje______|


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

hmm, misschien kan webalizer niet met meerdere files tegelijk overweg, en bewerkt (of wat dat prog ook doet) alleen de eerste.

Doe eens 'echo /var/log/httpd/nogwat/transfer.log*Jun*'. Dan print hij de filenames die bash matcht. Als hier alleen die van 4 juni uit komt, dan type jij iets fout, of dan zit er iets fout in bash (of bash' instellingen). Komen hier meerdere files uit, dan betekent dat dus dat webalizer niet met meerdere files tegelijk overweg kan.

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Topicstarter
Er komen meerdere files uit, dat wist ik ook.

Maar ik wil elke filename om-de-beurt en automatisch aan webalizer doorgeven.

Webalizer kent namelijk wel een incremental optie waarmee meedere bestanden, achter elkaar kunnen worden verwerkt.
Ik moet dan wel elk bestand met de hand opgeven.

Overigens moeten ze ook nog gesorteerd worden , maar dat vraag ik later wel.

|_____vakje______|


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Hoe bedoel je 'Ik moet dan wel elk bestand met de hand opgeven.'?
Moet je die intypen als je webalizer al hebt opgestart?

Zoals ik het nu begrijp, doe je 'webalizer <file1> <file2> <file3> <enz>', maar pakt webalizer hiervan alleen file1, maar hij prompt voor meerdere files, zodat jij dan nog <file2> <file3> <enz> moet intypen. Klopt dat?

Is dat webalizer een console proggie of een grafisch, trouwens?

  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
ls * | awk '{print "webalizer " $0}' > veelwebalizers.sh

. veelwebalizers.sh

eerste regel: doe een list en voor de list-output stop 't woordje "webalizer " en stop dit in de file "veelwebalizers.sh"

tweede regel: run deze "veelwebalizers.sh"
(let op de PUNT met spatie !!)

iOS N3rd


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

davar: dat kan waarschijnlijk eenvoudiger

  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
twee regeltjes.. in 10 seconden

iOS N3rd


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Topicstarter
deadinspace begrijpt mij niet.

ik kan alleen: webalizer <file1>
Dus voor meerdere files doe ik:
webalizer <file1>
webalizer <file2>
webalizer <file3>

ik ga de oplossing van davar ff proberen.

|_____vakje______|


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Ja, maar je moet er dus een tussenfile voor maken; bovendien kan het ook in 1 regel, als dat prog zich zo gedraagt als ik vermoed

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Ah, in dat geval werkt de oplossing van davar, maar het kan (iets) eenvoudiger:

for i in "var/log/httpd/nogwat/transfer.log*Jun*"; do webalizer "$i"; done

  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
da was 'm.. was ff for en foreach doorelkaar aan 't halen..
vandaar dat ik die niet heb gezegd (foreach is voor tcl/tk)

iOS N3rd


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Topicstarter
Dit is de werkende veelwebalizers.sh
Nu moeten ze in de goede volgorde worden afgewerkt.. dus 01 Jun en dan 02 Jun etc..

Dat er meerdere 04 Jun zijn, maakt niet uit.. want sommige zijn ongeldig.

Ik weet dat het irritant is, maar ik bepaal de bestandsnamen niet.
code:
1
2
3
4
5
6
7
8
9
10
11
webalizer /var/log/httpd/gratisringtones.com/transfer.log.10450.04-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.13212.04-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.14316.06-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.14631.01-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.16525.04-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.17352.04-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.19784.04-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.20917.03-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.2889.02-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.9263.05-Jun-2001.gz
webalizer /var/log/httpd/gratisringtones.com/transfer.log.9408.04-Jun-2001.gz

|_____vakje______|


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Topicstarter
[b]Op donderdag 07 juni 2001 23:07
for i in "var/log/httpd/nogwat/transfer.log*Jun*"; do webalizer "$i"; done
Error: Can't open log file /var/log/httpd/gratisringtones.com/transfer.log*Jun*

en ze bestaan echt!

|_____vakje______|


Verwijderd

Doe dan eens hetvolgende:
code:
1
for i in "var/log/httpd/nogwat/transfer.log*-Jun-*"; do webalizer $i; done

Dan moet het toch wel werken ;)

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

ow, fuk... er moeten geen "" om die filename met sterretjes heen. Het moet dus zijn:

for i in var/log/httpd/nogwat/transfer.log*Jun*; do webalizer "$i"; done

Verwijderd

Op donderdag 07 juni 2001 23:24 schreef deadinspace het volgende:
ow, fuk... er moeten geen "" om die filename met sterretjes heen. Het moet dus zijn:

for i in var/log/httpd/nogwat/transfer.log*Jun*; do webalizer "$i"; done
Mag wel hoor, als het goed is.
Die aanhalingstekens om de variable heen baren me meer zorgen eigenlijk.

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

nelske:

Nee, `` "transfer.log*" '' wordt door bash expandend naar `` transfer.log* '', terwijl `` transfer.log* '' wordt expanded naar `` transfer.log-04-jun '', `` transfer.log-05-jun '', enzovoort.

Die "" om $i heen zorgen er alleen voor dat het programma de file name zo mee krijgt `` webalizer "log file" '', in plaats van `` webalizer log file ''. Je ziet het meteen al: die "" beschermen tegen spaties.

Dus nu is mijn regel goed (btw, kheb hem ff getest :P ).

Dat sorteer probleem is een stuk lastiger, trouwens...

  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
--
nog een keer:

ls -t * | awk '{print "webalizer " $0}' > veelwebalizers.sh
. veelwebalizers.sh



--------

man ls
daar zie je : optie t = mod.time
evt --> r = reversed.

suit your needs and.. don't forget.. de mooiste dingen staan in de man-pages..

iOS N3rd


  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
o ja.. dit is ook de reden waarom ik een tussenfile elke keer maak:
- debugged makkelijker
- kan meer met het tussenresultaat

iOS N3rd


Verwijderd

Op donderdag 07 juni 2001 23:26 schreef nelske het volgende:

[..]

Mag wel hoor, als het goed is.
Die aanhalingstekens om de variable heen baren me meer zorgen eigenlijk.
zolang het geen kleine ' ' aanhalingstekens zijn :P

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

davar:

is zo, maar je moet na gebruik dus wel die tussenfile opruimen.

Verder, als je ls op datum laat sorteren, ga je er van uit dat die files ook zijn aangemaakt op die datum die in de filenaam verwerkt zit.

  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
nee.. ls -t = list op modification date..
ik doe bewust geen " .... | sort" dat sorteert juist wel op filename

iOS N3rd


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Ook goed, maar dan ga je er dus van uit dat die files ook op voor het laatst aangepast zijn op dezelfde datum die ook in de filename staat.

Verwijderd

deadinspace:
Bij mijn weten worden die * ook binnen de aanhalingstekens gesubstitueerd, tenzij je er een escape-char voor zet.

Verder geeft "$i" gok ik zo, de string $i terug en niet de waarde van de variabele, denk ik, maar missshien dat hier de substitutie ook wel op gaat.

/me kan het niet nalaten om nou zelf ff te gaan testen :P

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

nelske:

ik wist het ook ff niet meer zeker, dus ik heb maar even getest, en de resultaten kwamen toch echt overeen met wat ik beweer :P

Verwijderd

Op donderdag 07 juni 2001 22:21 schreef CyberSnooP het volgende:
Een voorbeeld lijkt me het nuttigststst:

webalizer /var/log/httpd/nogwat/transfer.log*Jun*

Nu zou ik verwachten dat hij alle bestanden (dus 01, 02, 03 etc..) bestanden pakt. Echter, webalizer pakt (willekeurig) alleen 4 Juni.

Nu wil ik dus een manier om alle bestanden apart door te voeren aan webalizer.

Ik ben een linux leek, en weet dus niet hoe ik te werk moet gaan.. hulp gevraagd! :)
Is dit geen oplossing:
cat /var/log/httpd/nogwat/transfer.log*Jun* | webalizer

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

jakman: dat hang er heel sterk van af hoe webalizer daar mee omgaat... lijkt me geen goed idee. bovendien sorteert dit nog altijd die files niet.

Verwijderd

FF testbestandjes aanmaken:
code:
1
for ((i = 0; i < 10; i++)); do touch "test-$i-bla spatie"; done


code:
1
for i in test-*-* ; do echo $i; done

Okee met newlines
code:
1
for i in "test-*-*" ; do echo $i; done

Okee alles op 1 regel
code:
1
for i in test-*-* ; do echo "$i"; done

Okee met newlines
code:
1
for i in "test-*-*" ; do echo "$i"; done

Niet Okee: resultaat is 'test-*-*'

Verwijderd

Op vrijdag 08 juni 2001 00:02 schreef deadinspace het volgende:
jakman: dat hang er heel sterk van af hoe webalizer daar mee omgaat... lijkt me geen goed idee. bovendien sorteert dit nog altijd die files niet.
Ja maar ls is toch al gesorteerd en anders doe je
ls * | sort | webalizer

wat is het eigenlijk webalizer?

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

jakman:

als je goed gekeken had, had je gezien dat ze helemaal niet alfabetisch gesorteerd moeten worden

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Topicstarter
webalizer is software om statistiek-pagina's te genereren vanuit apache-logs.

Ik vind het wel cool dat jullie allemaal proberen te helpen, ga gauw weer wat uitproberen.

edit:

Ik heb het e.e.a. uitgeprobeerd, maar:
ls -tr /var/log/httpd/gratisringtones.com/transfer.log*Jun* | awk '{print "webalizer " $0}' > veelwebalizers.sh

werkt voor mij het beste.

Het resultaat vind je hier

P.S. Het domein www.gratisringtones.com is niet van mij, het gaat om www.totalgsm.net

|_____vakje______|


  • Ro_meo
  • Registratie: Juni 2001
  • Laatst online: 09:31
yess... heb ik nu 'gewonnen' :9

iOS N3rd


  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Op donderdag 19 juli 2001 16:41 schreef davar het volgende:
yess... heb ik nu 'gewonnen' :9
euh?
is het nationale oude-topic-omhoog-trap-dag ofzo :?
Pagina: 1