bash - zmena nazvu suboru vo vsetkych podadresaroch
riesil som takuto ulohu:
zmente vsetky nazvy suborov v zlozke a vo vsetkych podadresaroch tak, aby neobsahovali male pismena v nazve...ale suborove priecinky nemente....
ulohu som vyriesil, moj skript je:
kde="/home/priecinok/"
cd $kde
kde=`pwd`
find -name "*" -type d |
(while read a;
do
cd $kde/$a
find -name "*[abcdefghijklmnoprstuwvxyz]*" -type f |
(while read b;
do
pom=`echo $b | tr "a-z" "A-Z"`
`mv $b $pom`
done);
`cd $kde`
done)
find -name "*[abcdefghijlmnoprstuvqwxyz]*" -type f |
(while read b;
do
pom=`echo $b | tr "a-z" "A-Z"`
`mv $b $pom`
done);
~
No a moje otazka ohladom mojho skriptu je:
find -name "*[abcdefghijlmnoprstuvqwxyz]*" v tomto prikaze mi nefungovalo ked som napisal namiesto vsetkych pismen iba [a-z] a neviem preco...
A druha otazka, nedalo by sa to napisat nejako jednoduchsie?moj sposob sa mi zda taky kostrbaty...
Dakujem za odpovede:)
Pre pridávanie komentárov sa musíte prihlásiť.
pre istotu link: http://www.commandlinefu.com/commands/browse
ten find je naozaj startovaci bod, ale nepotrebujes najst priecinky, takze zamen type za nieco ine (pozor, mozno skusajuci testuje aj znalost ci napriklad fifo socket je subor, takze mozno je vhodne pouzit operator NOT pre argument find-u).
--
:aby neobsahovali male pismena v nazve...
tr vie prehodit male na velke v slove. ak sa nerovnaju, tak pouzi mv.
--
cyklus si nahodis, a daj si pozor na oblubene nazvy suborov vytvarane napriklad:
mkdir \*
alebo podovne :)
ak som to spravil tak,ze som testoval ci je to subor tak sa vyskytol problem,ze find mi vypisal napr subor tento.txt ale s cestou,teda
home/zlozka/zlozka/tento.txt a ked som na to pouzil tr "A-Z" "a-z" tak mi zmenil aj cely retazec na velke pismenka a nie iba subor...teda pri naslednom prepisovani suboru boli mena adresarov a podaresarov velkymi pismenkami
for i in `find * -depth`; do (mv $i `echo $i|tr [:upper:] [:lower:]`); done