[Bash]Loopen over directories die spaties bevatten

Pagina: 1
Acties:

  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01-2025
Ik probeer een bash script te schrijven waarin ik een 'cd' wil doen naar een willekeurige directory. De voor de hand liggende code is de volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
count=`ls -l $workdir | wc -l`
dirnum=$RANDOM
let "dirnum %= $count+1"

i=0
for line in `ls $workdir`
do
  if [ $i -eq $dirnum ]
  then
    newdir=$line
    break 1
  fi
  let "i+=1"
done
cd $newdir

Het probleem is nu dat bij filenames met spaties het fout gaat. For loopt blijkbaar over woorden gescheiden door spaties. Een aanpassing van de for-loop met sed werkte ook niet:
code:
1
for line in `ls $workdir | sed 's/ /\\ /g'`

Ik heb dit probleem vaker gevonden met de search, maar telkens las men daar vanuit een file en een temporary file aanmaken is op de eerste plaats smerig en op de tweede plaats onveilig. Heeft iemand hier een oplossing voor?

  • frim
  • Registratie: Augustus 2001
  • Niet online
IFS="\n" toevoegen.

  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01-2025
Dan krijg je leuk gedrag:
code:
1
cd: /m t/data/music/: No such file or directory


Opgelost:
code:
1
IFS=$'\n'

[ Voor 18% gewijzigd door Ivo op 19-11-2005 17:02 ]