find

Voor wat niet in in een specifieke overige categorie past.
Plaats reactie
Gebruikersavatar
vi coactus
Berichten: 228
Lid geworden op: zo jan 19, 2020 12:02 pm

find

Bericht door vi coactus »

Code: Selecteer alles

$ find . -iname bla <......> 
Wat moet er op de puntjes staan om de bestanden die find gevonden heeft in een bestand genaamd bv helvete te zetten?
Ik heb al >, 2> geprobeerd en find met -print en -print0, maar het lijkt niet te lukken.
Gewoon een testbestandje dqat hhij in een seconde ziet, en ik normaalookzie als output is mij nog geen enkele keer gelukt om in dat logbestand te krijgen. Terwijl heel het internet hetzelfde doet :(
fietser
Berichten: 34
Lid geworden op: za feb 01, 2020 10:40 am
Locatie: proud off the north

Re: find

Bericht door fietser »

Code: Selecteer alles

bash-4.3$ find . -iname bla* >tekst
Ben geen exper, maar zo krijg ik een file tekst met bla* 195 regels lang.

Groet.
Slackware 14.2
Gebruikersavatar
vi coactus
Berichten: 228
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: find

Bericht door vi coactus »

Bla was voorbeeldnaam natuurlijk.
Ik had de naam lssort, met'find . -iname lssort' kwam die direct in beeld, maar kreeg hem dus niet in een file.
fietser
Berichten: 34
Lid geworden op: za feb 01, 2020 10:40 am
Locatie: proud off the north

Re: find

Bericht door fietser »

De resultaten van find naar een file sturen, gaat toch met het groter dan teken > ? :?

Groet.
Slackware 14.2
Gebruikersavatar
vi coactus
Berichten: 228
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: find

Bericht door vi coactus »

Zoals ik al zei: dat gebeurde dus niet. 2> file werkte ook niet, alletwee ook niet icm de opties -print en -print0 voor find.
Ik snap het ook niet.
Zonder > krijg ik heb gewoon op m'n scherm te zien, maar met > niet in een bestand.
Lijkt mij dat het gewoon direct in het bestand geschreven moet worden en niet een of andere buffer. Doelbestand wordt ook gewoon aangemaakt, dus het doet wel iets.
fietser
Berichten: 34
Lid geworden op: za feb 01, 2020 10:40 am
Locatie: proud off the north

Re: find

Bericht door fietser »

Code: Selecteer alles

 bash-4.3$ find . -iname bla*  2>   
bash: syntax error near unexpected token `newline'
bash-4.3$ find . -iname bla*  >2
bash-4.3$ ls -al 2
-rw-r--r-- 1 fietser users 18745 Apr  7 08:05 2

Met 2> foutmelding
Met >2 een file 2

Groet.
Slackware 14.2
Gebruikersavatar
vi coactus
Berichten: 228
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: find

Bericht door vi coactus »

Ken je die syntax niet?

Code: Selecteer alles

$ bla 2> zooi
De 2 geeft dan stderr aan.
Draai je iets in je cli dat veel foutmeldingen geeft die er niet toe doen, dan kun je 2>/dev/null doen.
Wil je dat juist wel hebben dan stuur je ze zo naar een bestand.
iswrong
Berichten: 104
Lid geworden op: ma feb 10, 2020 9:16 am

Re: find

Bericht door iswrong »

robert schreef: wo apr 01, 2020 11:07 pm

Code: Selecteer alles

$ find . -iname bla <......> 
Wat moet er op de puntjes staan om de bestanden die find gevonden heeft in een bestand genaamd bv helvete te zetten?

Code: Selecteer alles

> helvete
Anders is er iets mis met je shell(configuratie)?

Code: Selecteer alles

❯ find /bin > helvete
❯ cat helvete
/bin
/bin/sh
iswrong
Berichten: 104
Lid geworden op: ma feb 10, 2020 9:16 am

Re: find

Bericht door iswrong »

fietser schreef: do apr 02, 2020 11:11 am

Code: Selecteer alles

bash-4.3$ find . -iname bla* >tekst
Ben geen exper, maar zo krijg ik een file tekst met bla* 195 regels lang.
Dit is trouwens incorrect gebruik. bla* is een shell-glob die ge-expandeerd kan worden. Dus als je bijv. de bestanden bla1, bla2, bla3 in de huidige directory hebt, dan wordt dit commando ge-expandeerd naar (volgorde variabel):

Code: Selecteer alles

$ find . -iname bla1 bla2 bla3 >tekst
Alleen werkt het soms toevallig goed als je bash gebruikt omdat bash alsnog bla* doorgeeft als er toevallig geen glob matches zijn. Daarom moet je argumenten altijd quoten als ze glob karakters bevatten. Hier:

Code: Selecteer alles

$ find . -iname "bla*" >tekst
fietser
Berichten: 34
Lid geworden op: za feb 01, 2020 10:40 am
Locatie: proud off the north

Re: find

Bericht door fietser »

Leuk dat bash scripting.
Ik moet nog veel leren zie ik weer.
Voorlopig even niet de dagen worden weer langer. :p

Groet.
Slackware 14.2
iswrong
Berichten: 104
Lid geworden op: ma feb 10, 2020 9:16 am

Re: find

Bericht door iswrong »

fietser schreef: do apr 09, 2020 1:09 pm Leuk dat bash scripting.
Ik moet nog veel leren zie ik weer.
Voorlopig even niet de dagen worden weer langer.
Ja, Bourne shell is een soort van zwarte magie ;).
Gebruikersavatar
vi coactus
Berichten: 228
Lid geworden op: zo jan 19, 2020 12:02 pm

Re: find

Bericht door vi coactus »

fietser schreef: do apr 09, 2020 1:09 pm Leuk dat bash scripting.
Ik moet nog veel leren zie ik weer.
Voorlopig even niet de dagen worden weer langer. :p

Groet.
Extra veel tijd dus!.
Ik gebruik steeds meer. Voor de iets lastigere dingen natuurlijk de godentaal Perl.
Maar heb een hoop standaardscriptjes.
En heb bv alle bestanden bepaalde directories met uid i, gid j omgezet naar uid x en gid y. Zodat de rest wel de oorspronkelijke uid en gid behield.
Deed ik met find en xargs dacht ik.
Verder als ik een directory vol met rar's heb, of bv zips.

Code: Selecteer alles

for i in *.rar; do unrar x "$i"; done
De "" indien de bestandsnamen spaties en andere speciale tekens bevatten.
Zitten de bestanden niet in een subdir dan gebruik ik dit:

Code: Selecteer alles

for i in *.zip; do 7z x -o`echo "$i" |sed s/\.zip// ` "$i"; done
iswrong kan het vast beter, maar ik vind het goed genoeg.
Wat ik dan wel weer in perl geschreven heb is een programma om bepaalde (delen van) bestandsnamen te reversen.
Kwam laatst wel een bug tegen, dus moet ik nog even repareren.

Deze gebruikte ik voor dat omzetten van uid en gid.:

Code: Selecteer alles

find . -user 1000 -exec chown 1026:100 {} \;
Had ik nodig voor m'n synology nas, Daar kun je niet zomaar de uid en gid van een user aanpassen (ivm met nfs), dus dan maar de user en gid op m'n pc aangepast. Geen idee hoe dat mapping van nfsv4 werkt. Synology is sowieso niet voor 'power users'. sabnzbd heeft een rare uid en gid, en geeft de bestanden 777 rechten.
Nu kun je scripts in sabnzbd schrijven, maar die hebben dan waarschijnlijk weer niet genoeg rechten. Een bashscript met cronjob kan bv weer wel. Of een 'watcher' laten draaien.

In the end gebruik ik bash eigenlijk enkel voor '1 lijnige' scripts, daarna schakel ik al snel om naar perl.
Dit gebruikte ik eerst om die bestandsnamen aan te passen (en dan ook voor de srt).

Code: Selecteer alles

perl -e 'use 5.010; @bla=`ls *.mkv`; foreach(@bla){chomp $_ ;@var = split(/\.(\w+)$/,$_,2); system("mv \"$_\" \"" . reverse($var[0]) . "\".\"$var[1]\"\n");}'
Nu gewoon een scriptje van gemaakt waarbij je * als argument aangeeft en hij enkel .srt en .mkv aanpast. Enige bug is dat hij ook de naam van een directory die in die dir zit omkeert qua naam, dat moet niet.
iswrong kan bovenstaande vast wel even in een bash regeltje om schrijven :P.
Ik vind hem wel briljant.. use 5.010 is nodig, ik gebruik `` én ik gebruik system.
Plaats reactie