bash - zmena nazvu suboru vo vsetkych podadresaroch

Sekcia: Programovanie 08.06.2009 | 06:14
Avatar mravciar   Používateľ
Ahojte,vedel by mi niekto prosim pomoct s tymto?
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:)
    • Re: bash - zmena nazvu suboru vo vsetkych podadresaroch 08.06.2009 | 11:00
      Avatar yetti Gentoo, CentOS, Sabayon  Používateľ
      ja ti exaktne neporadim, ale mozno najdes nieco tu

      pre istotu link: http://www.commandlinefu.com/commands/browse
      --<br/> Pekný deň a úsmev na tvári !!!
    • Re: bash - zmena nazvu suboru vo vsetkych podadresaroch 08.06.2009 | 11:50
      WlaSaTy   Návštevník
      :zmente vsetky nazvy suborov v zlozke a vo vsetkych podadresaroch ale suborove priecinky nemente....

      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 :)
      • Re: bash - zmena nazvu suboru vo vsetkych podadresaroch 08.06.2009 | 13:24
        Avatar mravciar   Používateľ
        ja som testoval najprv ci je to priecinok (-type d) lebo nazvy priecinkov menit nemam....a potom som testoval ci je to (-type f) ...
        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
        • Re: bash - zmena nazvu suboru vo vsetkych podadresaroch 08.06.2009 | 15:40
          WlaSaTy   Návštevník
          basename ma aj myslim opoziciu zvanu basepath ak si dobre spominam. ale na druhu stranu to moze zblbnut pri subore ktory moze mat v nazve unixove lomitko. Normalne nieco take zakazuje FS layout, ale non ux fs to mozu sposobit aj take neocakavane stavy, rovnako ako keby si isiel napchad napriklad do NTFS subor ktory ma v nazve dvojbodku (dokazis tak bitmapy).
    • Re: bash - zmena nazvu suboru vo vsetkych podadresaroch 09.06.2009 | 16:52
      Avatar kormidelnik   Používateľ
      naco tak zlozito, staci jeden riadok

      for i in `find * -depth`; do (mv $i `echo $i|tr [:upper:] [:lower:]`); done
      • Re: bash - zmena nazvu suboru vo vsetkych podadresaroch 09.06.2009 | 16:57
        Avatar Michal Nánási Ubuntu 11.04  Používateľ
        ee, nechces menit adresare medzi tym, takze for i in `find * -depth`; do (mv $i `dirname $i`/`basename $i|tr [:upper:] [:lower:]`); done
        Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!