[Bash]Array met file locaties maken

Pagina: 1
Acties:

  • FailFr8er
  • Registratie: Juli 2001
  • Laatst online: 27-01 08:59
Ik probeer op dit moment een scriptje te schrijven die uiteindelijk alle .avi's en .mpg's in een directorystructuur moet gaan ombouwen naar H.264. Dit probeer ik overigens te doen in Bash.

Nu is het simpelste om een array met alle file locaties te maken, en die 1 voor 1 doorlopen, maar daar stuit ik op een aantal problemen.

Ik krijg op geen enkele manier alle files netjes in een array. Na een halve dag verder ben ik nog geen snars verder, maar heb ik wel een aantal leads waar ik telkens op een dood einde loop:

[1] Een combinatie van find en cut
code:
1
2
3
find /mnt/shared/Movies | egrep '(\.avi|\.mpg)$' 

cut -d \n -f 2

Hiermee probeer ik dus de find te splitsen op de line breaks, probleem is alleen dat cut, zover ik kan zien, niet de mogelijkheid heeft om te splitsen op die manier. Ik moet namelijk een char opgeven, en op deze manier pakt hij alleen de 'n' als delimiter. Quotes etc. veroorzaken errors mbt het feit dat hij alleen een single char accepteerd

[2]
Simpel met ls
code:
1
ls -b -R /mnt/shared/Movies/ | egrep '(\.avi|\.mpg)$'

Werkt geweldig, totdat ik erachter kwam dat mijn directory structuur niet in de lijst stond, en ik er dus nog steeds vrij weinig mee kan :P.

Ik kom hier dus niet veel verder mee, en ik google me helemaal suf maar ik kan nergens vinden hoe ik een fatsoenlijke array maak met alle file locaties erin. Heeft iemand toevallig nog ideeën?

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Zonder inhoudelijk in te gaan op het verhaal, bedoel je met \n, een n, want bash zal die \ zelf interpreteren en vervolgens alleen een n doorgeven.

  • FailFr8er
  • Registratie: Juli 2001
  • Laatst online: 27-01 08:59
blaataaps schreef op maandag 01 oktober 2007 @ 15:59:
Zonder inhoudelijk in te gaan op het verhaal, bedoel je met \n, een n, want bash zal die \ zelf interpreteren en vervolgens alleen een n doorgeven.
Ik bedoel daarmee dus de line break die find (als het goed is) teruggeeft in de lijst met file locaties.

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

find geeft toch altijd ieder resultaat op een eigen regel terug? zou je niet met iets als

code:
1
find . -name '*.mpg'


veel verder komen? (misschien kan je ook regexes gebruiken in find's prompt, dono, check 'man find')

  • MrJay
  • Registratie: Juni 2004
  • Laatst online: 24-10-2024
Gebruik zoals GX hierboven al aangeeft de zoekfunctie van find (daarvoor is ie gemaakt ;) )

Misschien dat je dan nog problemen krijgt met het loopen door de resultset, omdat ie dan splitst op spaties. Om een extra vraag te voorkomen, probeer dit:

code:
1
2
3
4
export IFS=$'\n'

for file in $(find ...)
...


dan geeft ie elke regel apart terug in de loop

  • FailFr8er
  • Registratie: Juli 2001
  • Laatst online: 27-01 08:59
MrJay schreef op maandag 01 oktober 2007 @ 18:19:
Gebruik zoals GX hierboven al aangeeft de zoekfunctie van find (daarvoor is ie gemaakt ;) )

Misschien dat je dan nog problemen krijgt met het loopen door de resultset, omdat ie dan splitst op spaties. Om een extra vraag te voorkomen, probeer dit:

code:
1
2
3
4
export IFS=$'\n'

for file in $(find ...)
...


dan geeft ie elke regel apart terug in de loop
Dat IFS verhaal had ik idd gevonden :). Ik zal dit vanavond even proberen, als dit werkt dan sla ik mezelf heel hard voor mn kop en ga ik eens kijken of ik verder kom ;).

  • Borromini
  • Registratie: Januari 2003
  • Niet online

Borromini

Mislukt misantroop

GX schreef op maandag 01 oktober 2007 @ 16:42:
find geeft toch altijd ieder resultaat op een eigen regel terug? zou je niet met iets als

code:
1
find . -name '*.mpg'


veel verder komen? (misschien kan je ook regexes gebruiken in find's prompt, dono, check 'man find')
Yep. find . -name '*.mpg' -exec $conversiescript. Zelfde voor AVI. Zo gepiept.

Got Leenucks? | Debian Bookworm x86_64 / ARM | OpenWrt: Empower your router | Blogje

Pagina: 1