[Megoldva] Bash scripten belül szóközös fájnévre parancsvégrehajtás nem megy

Sziasztok!

Egy menetben szeretnék törölni darabolt rar fájlokat a következő scripttel.


for i in *.rar
do
   echo "$i"
   if rm `echo $i | sed -e 's/.rar/.*/g'`
   then
      echo OK
   else
      exit 0
   fi
done

A futtatásra ezt kapom:
new file.rar
rm: cannot remove `new': No such file or directory
rm: cannot remove `file.*': No such file or directory

Idéző jeleket használva ""


for i in *.rar
do
   echo "$i"
   if rm "`echo $i | sed -e 's/.rar/.*/g'`"
   then
      echo OK
   else
      exit 0
   fi
done

A futtatásra ezt kapom:
new file.rar
rm: cannot remove `new file.*': No such file or directory

Ha kézzel indítom az rm parancsot a parancssorból
rm new\ file.*
Akkor törli a fájlokat.

Ezt is próbáltam


for i in *.rar
do
   echo "`echo $i | sed -e 's/.rar/.*/g;s/ /\ /g'`"
   if rm "`echo $i | sed -e 's/.rar/.*/g;s/ /\ /g'`"
   then
      echo OK
   else
      exit 0
   fi
done

A futtatásra ezt kapom:
new file.*
rm: cannot remove `new file.*': No such file or directory

Mi lehet a megoldás?

Köszi
Levus

Hozzászólások

echo "$i" - az if-en belul is

Amugy meg find . -name \*.rar -exec rm {} \;

Persze ez rekurzivan lemegy a konyvtarakba. szoval eloszor rm helyett ls legyen benne...

Az indító próbálkozásait nézve nekem úgy tűnik, hogy rar-t adna meg paraméternek, de törölni nem csak a .rar fájlt akarja, hanem az r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42, r43, r44, r45, r46, r47, r48, r49, r50, r51, r52, r53, r54, r55, r56, r57, r58, r59, r60, r61, r62, r63, r64, r65, r66, r67, r68, r69, r70, r71, r72, r73, r74, r75, r76, r77, r78, r79, r80, r81, r82, r83, r84, r85, r86, r87, r88, r89, r90, r91, r92, r93, r94, r95, r96, r97, r98, r99 kiterjesztésűeket is. De lehet, hogy még a 000, 001 és néhány más kiterjesztést is le akar gyalulni. Ő valahogy úgy fogalmazta, hogy "`basename \"$filename\" .rar`.*", csak nem pont ezekkel a szavakkal, és mintha kifelejtette a visszaperes idézőjeleket.

- ha ezt kézzel írtad be...gratula.
:)
--
"Megtanultam a zenét, de nem csináltam, s azóta tudással, de irigység nélkül hallgatom.
Megtanultam egy sereg tudományt, mesterséget és művészetet, értek hozzájuk, de nem csinálom, s így érdektelenül tudom azokat élvezni. "
Hamvas Béla

Felettem szolonak van igaza. Findal lenyegesen egyszerubb.

Ez nekem eleg jol mukodik:

for i in *.rar
do
FNAME=`echo $i | cut -d . -f 1 | sed -e 's/\ /\\ /g'`
if find . -maxdepth 1 -name "$FNAME.*" -exec rm {} \;
then
echo OK
else
exit 0
fi
done

ls -laR elotte:

fooy@foo-notebook:~/download/rartest> ls -laR
.:
total 28
drwxr-xr-x 3 aszechy users 4096 2009-08-25 15:50 .
drwxr-xr-x 19 aszechy users 4096 2009-08-25 15:25 ..
-rw-r--r-- 1 aszechy users 0 2009-08-25 15:50 new file.r01
-rw-r--r-- 1 aszechy users 0 2009-08-25 15:50 new file.rar
-rw-r--r-- 1 aszechy users 186 2009-08-25 15:49 script
-rw-r--r-- 1 aszechy users 12288 2009-08-25 15:49 .script.swp
drwxr-xr-x 2 aszechy users 4096 2009-08-25 15:44 test

./test:
total 8
drwxr-xr-x 2 aszechy users 4096 2009-08-25 15:44 .
drwxr-xr-x 3 aszechy users 4096 2009-08-25 15:50 ..
-rw-r--r-- 1 aszechy users 0 2009-08-25 15:44 new file1.r01
-rw-r--r-- 1 aszechy users 0 2009-08-25 15:44 new file1.rar

...utana (szoval nem gyilkolta ki az alkonyvtarbol a masik rar-t):

fooy@foo-notebook:~/download/rartest> bash script
OK
foo@foo-notebook:~/download/rartest> ls -laR
.:
total 28
drwxr-xr-x 3 aszechy users 4096 2009-08-25 15:51 .
drwxr-xr-x 19 aszechy users 4096 2009-08-25 15:25 ..
-rw-r--r-- 1 aszechy users 186 2009-08-25 15:49 script
drwxr-xr-x 2 aszechy users 4096 2009-08-25 15:44 test

./test:
total 8
drwxr-xr-x 2 aszechy users 4096 2009-08-25 15:44 .
drwxr-xr-x 3 aszechy users 4096 2009-08-25 15:51 ..
-rw-r--r-- 1 aszechy users 0 2009-08-25 15:44 new file1.r01
-rw-r--r-- 1 aszechy users 0 2009-08-25 15:44 new file1.rar

Ezt hittem én is, és vagy 25x kipróbáltam különféle módokon (még az evalt is bevetettem), mire leesett, hogy miért mégsem teljesen így: a glob feloldás nem történik meg az idézőjelek között, viszont a potenciális IFS karakterek miatt idézőjelezni muszáj. Vagyis a *-nak túl kell lógnia az idézőjelezett részen.

Pl: rm "`echo $i | sed -e 's/.rar/./g'`"*