Sziasztok!
Van egy hatalmas könyvtárszerkezetem amiben van sok .mp3, néhány .txt illetve néhány kiterjesztés nélküli fájl.
Az utóbbi kettő (.txt és kiterjesztés nélküli) típust szeretném átnevezni command line-ból, úgy hogy rejtettek legyenek (azaz . kerüljön a nevük elé).
Próbáltam szimplán rename paraccsal de az sajnos nem tudja -R kapcsolóval bejárni az alkönyvtárakat.
Tudnátok nekem segíteni, melyiket hogy nevezzem át?
Köszönöm előre is.
- 2148 megtekintés
Hozzászólások
Közvetett módon?
top=`pwd`; for dir in `find . -type d`; do cd $dir; rename --kapcsolo argumentumok; cd $top; done
- A hozzászóláshoz be kell jelentkezni
Ha tényleg csak a fenti fájlok vannak ott, akkor kb. ennyi:
find /dir/ ! -name '*.mp3' -type f -exec mv {} .{} \;
Mondjuk nem rekurzív, de arra nincs is szükség, sőt, csak bonyolítaná a dolgot.
JAVÍTÁS: ez nem jó! Persze, mert én csak könyvtárstruktúra nélkül próbáltam, ott működik.
Loptam f0hxu-tól :D
Az idézőjelek nagyon fontosak ha van szóköz is a fájl- vagy könyvtárnevekben.
- A hozzászóláshoz be kell jelentkezni
Linux + bash-t feltételezve
for i in $( find . -type f \( ! -name "*.*" -o -name "*.txt" \));
do
mv $i $(echo $i | sed -e 's/\(.*\/\)\(.*\)$/\1.\2/');
done
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Ez nem csak egy mélységig működik rendesen? sed -e 's/\(.*\/\)\(.*\)$/\1.\2/' mintha nem venné figyelembe hogy tobb/jel/is/lehet az elérési útban. Majd kipróbálom.
- A hozzászóláshoz be kell jelentkezni
echo "/foo/bar/foobar.txt" volt a legmélyebb amit a sed-re ráechoztam, azt még megcsinálta.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
+1 mélyebbeket is rendesen megcsinál. Annak ellenére hogy semmi nem zárja ki hogy a második találatba is belekerülhessen egy '/' jel.
- A hozzászóláshoz be kell jelentkezni
nem tudom, de lehet, hogy mumosomnak a greedy-ségnek van köze hozzá? \1 illeszkedik a leghosszabb /-re végződő rész-stringre, \2 pedig a string végén lévő tetszőleges karakterre. vagy mi :P
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
A for szétszedi a stringet ha van benne szóköz.
- A hozzászóláshoz be kell jelentkezni
szóköz fájlnévben UNIX like rendszeren? O.O
(csak vicc)
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
a rename úgy ahogy van egy kalap sz*r. minden disztribúción más a syntax/használat. hanyagold.
van egy "fájl normalizációs" scriptem, mv-t használ find-al [egy loop-ban, depth-el kombinálva], anno arra használtam, hogy a mindenféle hülye nevekből, pl.: "(2009)-válami.vs.Mittomén'.mp3"-ból pl.: "2009-Valami-vs-mittomen.mp3"-at készítsen rekurzívan, stb
- A hozzászóláshoz be kell jelentkezni
Wait. Itt azt boncolgattak hogy a unix kis parancsok sokkal stabilabbak mint a rendszer API. Akkor megsem? :(
- A hozzászóláshoz be kell jelentkezni
for i in $(find . -depth -type f -name "*.txt" -print)
do
mv $i $(echo $i | sed 's/\/\([^\/]*.txt\)$/\/.\1/')
done
De csak ha nincs szóköz a fájlnevekben és az útvonalban.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
szokozokkel is megy:
op@pandora-d test> find . -name "*.txt"
./test 10/test2/dfgh sdfsds fssdfsdfsdf dfdf.txt
./test 10/dfghdf.txt
./test 10/dfgh sdfsdfsdfdf.txt
./dfghdf.txt
op@pandora-d test> bin/recursor.csh
./dfgh sdfsds fssdfsdfsdf dfdf.txt -> .dfgh sdfsds fssdfsdfsdf dfdf.txt
./dfghdf.txt -> .dfghdf.txt
./dfgh sdfsdfsdfdf.txt -> .dfgh sdfsdfsdfdf.txt
./dfghdf.txt -> .dfghdf.txt
op@pandora-d test> find . -name "*.txt"
./test 10/test2/.dfgh sdfsds fssdfsdfsdf dfdf.txt
./test 10/.dfghdf.txt
./test 10/.dfgh sdfsdfsdfdf.txt
./.dfghdf.txt
recursor.csh:
#!/bin/csh
set exec_p = /tmp/test/bin/recursor.csh
foreach i ( "`find . -type d -depth 1`" )
(cd "$i"; $exec_p)
end
foreach j ( "`find . -depth 1 -name '*.txt'`" )
mv -v "$j" ".`basename '$j'`"
end
mondjuk nem a leggyorsabb
szerk.:
es igen, csh-ban nincsenek fuggvenyek :)
___
info
- A hozzászóláshoz be kell jelentkezni
Úgy van. Szóközökkel is megy ha a változót (jelen esetben $i) idézőjelek közé rakod. Én már évek óta így használom. ("$i").
- A hozzászóláshoz be kell jelentkezni
Engem is erdekel, feliratkozom.
- A hozzászóláshoz be kell jelentkezni
Én is feliratkozom, még jól jöhet.
- A hozzászóláshoz be kell jelentkezni
+1 subscribe
--
http://www.micros~1
- A hozzászóláshoz be kell jelentkezni
a keresést már láttad, az átnevezést normális linuxon így érdemes:
mv $i $(dirname $i)/.$(basename $i)
- A hozzászóláshoz be kell jelentkezni
+1
...néha csak a legtriviálisabb dolgok nem szúrják ki az ember szemét... :)
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Vegignezve a sok epito jellegu scripten, sztem jobban jarsz egy total commanderrel :-)
- A hozzászóláshoz be kell jelentkezni
+1 Total Commander :)
De azért itt egy működő script, amit nem gyilkol le egy szóközös fájlnév:
perl -e 'sub a{my$x=shift;opendir(my$d,$x);while(readdir($d)){my$p="$x/$_";next if($_=~/^\.\.?$/||!-r$p);if(-d$p){&a($p)}elsif($_=~/^[^\.]+(?:\.txt)?$/){rename($p,"$x/.$_")}}closedir($d)}&a("/tmp")'
- A hozzászóláshoz be kell jelentkezni
Per(l)verz :) De teljesen jó :-P
- A hozzászóláshoz be kell jelentkezni
Azért arra kíváncsi lennék, hogy van-e még ép fájlrendszered :D
- A hozzászóláshoz be kell jelentkezni
és mi a neve ezen a héten :D
- A hozzászóláshoz be kell jelentkezni