space -> _

A problema lenyege az volt, hogy a
#####################################
#!/bin/bash
current=`pwd`
for dir in `ls -1`
do
cd "${dir}"
mv -v ./* "${current}"/
cd "${current}"
done
#####################################

script nem ugy mukodik ahogy "kellene" (vagyis nem ugy ahogy en gondoltam), ha szokozok is vannak a konyvtarnevben mivel ha igy hasznaljuk akkor a space a default delimiter es mivel bash-ben eleg kezdo vagyok ezert gondoltam atvaltoztatom a spacet _-ra, mert amugy is idegesit az alland "\ " a filenevekben. Az eredmeny vegulis ez lett:

#####################################
#!/bin/bash
#space to underscores "\ "->_
for dir in `ls -1 | sed -e's/\ /_/g'`
do
temp=`echo $dir |sed -e's/_/\ /g'`;
mv "${temp}" "${dir}"
done
#####################################
tulajdonkeppen mielott atadnank a for-nak a listat a sed segitsegevel kicserelunk minden "\ "-t _-ra majd ugyanezt visszacsinaljuk, hogy megkapjuk az eredeti nevet is es at tudjuk nevezni. Lehet, hogy van egyszerubb, univerzalisabb megoldas ha igen emilezzetek nyugodtan.

Hozzászólások

Amit írtam, az egy dologra vonatkozik. A bash manpage-ében Shell Variables cím alatt írnak az IFS (Internal Field Separator) nevű shell változóról. Azt állítsd be, h csak newline legyen benne, és láss csodát (;

(btw, nem kell a -1 argument, elég a for dir in `ls`, valamint ha olyat írsz, h sed -e's/\ /_/g', akkor az aposztrófokon belül felesleges még egyszer escape-elni azt a szóközt \-sel.)

man prename

es sok egyeb problemad is megoldodik:)