← Back to team overview

sslug-teknik team mailing list archive

Re: find ./ og filer med mellerum, hvordan?

 

Den tirsdag 3.okt kl. 23:44 skrev Christoffer Holm Kjølbæk:

tir, 03 10 2006 kl. 23:40 +0200, skrev Kim Schulz:
On Tue, 03 Oct 2006 23:21:39 +0200
Christoffer Holm Kjølbæk <linux@xxxxxxxxxxxx> wrote:

tir, 03 10 2006 kl. 23:19 +0200, skrev Kim Schulz:
On Tue, 03 Oct 2006 22:45:31 +0200
Christoffer Holm Kjølbæk <linux@xxxxxxxxxxxx> wrote:

Hej,

Jeg har lavet dette lille script, så skal sørge for at alt min
musik har de rigtige rettigheder.

sudo chown mythtv:mythtv * -R
sudo chmod 777 * -R
for i in $( find ./ -name '*.ogg');
do chmod 666 $i;
done

Det virker ganske godt, lige indtil den finde en fil der har et
mellem rum i navnet.

Jeg tror det der sker er at den tolke mellemrummet som en slags
separator (hvilket det jo er :) Men hvis en fil hedder "foo
bar.ogg", så ser den det som to filer, foo og bar.ogg

Hvordan klare man lige den?

smid "" omkring $i

Det giver stadig det samme:
chmod: kan ikke tilgå './The_Offspring/Smash/11': Ingen sådan fil
eller filkatalog
chmod: kan ikke tilgå '-': Ingen sådan fil eller filkatalog
chmod: kan ikke tilgå 'What_Happened_to_You_.ogg': Ingen sådan fil
eller filkatalog

Filen hedder ./The_Offspring/Smash/11 - What_Happened_to_You_.ogg





prøv
chmod 666 - "$i"

Det giver det samme...

Det gør det nemlig, for problemet ligger højere oppe i scripted.
Problemet ligger i linien
	for i in $( find ./ -name '*.ogg');
eller faktisk før.

Ser du, problemet er IFS variablen. Den er normalt sat til ALT whitespace, dvs. mellemrum, tab og newline. For at løse dit problem skal du sætte den til fx. kun
newline. Det gør du hen over 2 linier på denne måde

OLDIFS=$IFS
IFS="
"
for i in $(...
IFS=$OLDIFS


Men der er også en helt anden mulighed, og det er dette
	ind ./ -name '*.ogg' -exec chmod 666 "{}" \;



JonB






Follow ups

References