Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

/bin/bash: Razmak u nazivima fajlova i liste

[es] :: Skript jezici :: /bin/bash: Razmak u nazivima fajlova i liste

[ Pregleda: 1733 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Not now, John!

Član broj: 231
Poruke: 1307
*.teol.net.



Profil

icon /bin/bash: Razmak u nazivima fajlova i liste21.06.2005. u 18:21

Kako kreirati listu fajlova u nekom folderu da for petlja uzima u obzir fajl po fajl, bez obzira što u nazivima nekih fajlova postoji razmak?

Ovaj kod
Code:
files=`ls`
for file in $files; do
  echo "-> $file"
done

radi kada nema razmaka u nazivima fajlova, ali ne radi u suprotnom slučaju.
Ako imam sljedeće fajlove:
Code:
fajl1.jpg
fajl2.jpg
moja fotka.jpg
fajl4.jpg

na izlazu dobijam:
Code:
-> fajl1.jpg
-> fajl2.jpg
-> moja
-> fotka.jpg
-> fajl4.jpg

Probao sam sve moguće varijacije komade ls, sa navodnicima, escape sekvencama i sl. i ništa mi nije pomoglo.

Unaprijed hvala.
"I'd take the awe of understanding over the awe of ignorance any day."
- Douglas Adams
21.06.2005. u 18:21 

Alef
Viktor Kerkez
Novi Sad

Član broj: 505
Poruke: 188
*.dialup.neobee.net.



Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste21.06.2005. u 19:45
Code:

for i in *
do echo "$i"
done
21.06.2005. u 19:45 

Not now, John!

Član broj: 231
Poruke: 1307
*.teol.net.



Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste21.06.2005. u 19:56
Hvala prijatelju. Nije kako sam zamišljao, ali će mi odraditi posao.
Pozdrav.
"I'd take the awe of understanding over the awe of ignorance any day."
- Douglas Adams
21.06.2005. u 19:56 

Not now, John!

Član broj: 231
Poruke: 1307
*.teol.net.



Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste21.06.2005. u 20:06
Hm... ipak neće. Treba da sortiram listu fajlova u nekom folderu prema posljednjem vremenu izmjene, da bih ih preimenovao u rastućem redoslijedu...

Ima li rješenje za to?
"I'd take the awe of understanding over the awe of ignorance any day."
- Douglas Adams
21.06.2005. u 20:06 

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1502
*.montgomery.com.

ICQ: 60630914


Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste21.06.2005. u 20:20
mislim da ti je dovoljno:

Code:

files=`ls`
for file in "$files"; do
  echo "-> $file"
done


mrzim da dajem LDP linkove, ali ipak:

http://www.tldp.org/LDP/abs/html/

ako zamislis loop-unrolling, skontaces brzo u cemu je bila greska.
21.06.2005. u 20:20 

Not now, John!

Član broj: 231
Poruke: 1307
*.teol.net.



Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste22.06.2005. u 12:22
Citat:
caboom: mislim da ti je dovoljno:

Code:

files=`ls`
for file in "$files"; do
  echo "-> $file"
done


mrzim da dajem LDP linkove, ali ipak:

http://www.tldp.org/LDP/abs/html/

ako zamislis loop-unrolling, skontaces brzo u cemu je bila greska.

Gornji kod definitivno ne radi, jer ako stavim $files pod navodnike u for petlji onda $file postane jednako $files, tj. for petlja, uopšte ne ide liniju po liniju. Ako ne stavim navodnike onda smetaju razmaci...

Tu knjigu imam na svom računaru, ali nisam imao vremena da čitam čitavu knjigu zbog jednog problema, jer u sadržaju se ne spominje nešto što bi moglo da riješi ovaj problem.

Ipak, na početku knjige sam našao jednu funkciju koja je riješila problem...

Evo koda:
Code:

processfilelist () {
  while read line; do
    echo "-> $line"
  done
}

files=`ls -1tr`
echo "$files" | processfilelist

"I'd take the awe of understanding over the awe of ignorance any day."
- Douglas Adams
22.06.2005. u 12:22 

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1502
*.montgomery.com.

ICQ: 60630914


Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste22.06.2005. u 19:53
tacno... sorry, nisam proverio
22.06.2005. u 19:53 

random
Vladimir Vrzić
Senior Software Engineer, Vast.com
Stari Cerak

Tehnički konsultant
Član broj: 85
Poruke: 3855
*.eth-wifi.verat.net.

Sajt: www.last.fm/user/vrza


Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste04.07.2005. u 16:39
Not Now, John!, to nije rešenje problema, već workaround.

Imena fajlova sa spejsovima su potpuni seks u shell skriptingu. Ovo sa for petljom je još jednostavno (eto, recimo možeš da je zameniš while read petljom).

xargs srećom ima mogućnost da se definiše neki drugi separator, pa ova mogućnost ponekad može biti korisna, kao što ovaj lik pokazuje ovde:

http://hacks.oreilly.com/pub/h/7

Pre neko veče sam baš pisao jedan shell skriptić, i naišao na sledeću muku sa spejsovima.

Recimo da sam imao nešto ovako

SUBTITLE="/Neka Putanja/Neki Film/Neki Film Titl.sub"

Apsolutno ne znam kako da vrednost ove promenljive strpam u drugu promenljivu, a da spejsovi ostanu escape-ovani? Ako pokušam sa

COMMANDLINE="${COMMANDLINE} -sub ${SUBTITLE}"

to, naravno, neće ići, spejsovi u $SUBTITLE stringu će dalje biti tretirani kao i svi drugi spejsovi u COMMANDLINE stringu. Nisam uspeo da rešim ovaj problem, već sam morao da promenim kod, uvodeći if strukturu. Opet workaround, i to ružan. Hoću da mi neko pokaže pravo, robusno rešenje za ovaj problem koje uvek pouzdano radi!
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
04.07.2005. u 16:39 

random
Vladimir Vrzić
Senior Software Engineer, Vast.com
Stari Cerak

Tehnički konsultant
Član broj: 85
Poruke: 3855
*.eth-wifi.verat.net.

Sajt: www.last.fm/user/vrza


Profil

icon Re: /bin/bash: Razmak u nazivima fajlova i liste04.07.2005. u 17:32
Post Scriptum:

Q: Kako prepoznati shell skript Linux-centrika?
A: Lako, imaće u prvom redu #!/bin/bash :o)
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
04.07.2005. u 17:32 

[es] :: Skript jezici :: /bin/bash: Razmak u nazivima fajlova i liste

[ Pregleda: 1733 | Odgovora: 8 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.