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
- 1454 megtekintés
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...
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
- 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
- A hozzászóláshoz be kell jelentkezni
Találomra kitörölhettem volna mondjuk az r52-őt, hogy ne legyen kétség =)
- A hozzászóláshoz be kell jelentkezni
Persze ez rekurzivan lemegy a konyvtarakba.
-depth es a rar helyett regexp es mar jo is.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Felettem szolonak van igaza. Findal lenyegesen egyszerubb.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
IFS='
'
a for ciklus elé
- A hozzászóláshoz be kell jelentkezni
Ugyes otlet, de a valodi megoldas LGee elso hozzaszolasaban van. Meg kell tanulni, hogy a valtozohivatkozasokat az esetek 99,9999...9 %-ban idezojelek koze kell tenni. (A te megoldasod pl. hulyet kap akkor, ha a fajlnevben ENTER van :-) )
- A hozzászóláshoz be kell jelentkezni
Mondjuk attól én is. :))
--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc
- A hozzászóláshoz be kell jelentkezni
"Ugyes otlet, de a valodi megoldas LGee elso hozzaszolasaban van."
Nem egészen, mert nem a változóra hivatkozást kell idézőjelbe tenni, hanem az egész parancs-behelyettesítést:
if rm "`echo $i | sed -e 's/.rar/.*/g'`"
- A hozzászóláshoz be kell jelentkezni
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'`"*
- A hozzászóláshoz be kell jelentkezni
Az már egy másik probléma, a regexpet én egyáltalán nem parseoltam (;
- A hozzászóláshoz be kell jelentkezni
Nem is a regexpről, hanem a shell 'path expansion'-jéről beszélek, amit "megbénít" az, ha a '*' idézőjelen belülre kerül
A regexp akár jó is lehet, ha nincsenek pont nélkül rar-ra végződő fájlok - persze ha az ember erre számít, akkor úgyis vannak. :)
- A hozzászóláshoz be kell jelentkezni
Köszönöm ez a megoldás működik :)
Üdv
Levus
- A hozzászóláshoz be kell jelentkezni