Portál AbcLinuxu, 19. dubna 2024 10:13


Dotaz: Hromadná změna názvu souboru dle regexp

6.3.2013 17:42 regulator
Hromadná změna názvu souboru dle regexp
Přečteno: 303×
Odpovědět | Admin
Ahoj,

můžete mi poradit jak hromadně přejmenovat všechny soubory ve složce s danou maskou např.

/home/admin/neco-neco.www.neco.txt

na

/home/admin/neco-neco.neco.txt

Tedy zbavit se "www.".

Díky

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.3.2013 19:27 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
nezkoušel jsem, ale myslím, že tohle umí příkaz rename
6.3.2013 20:04 potato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
Existují dva různé příkazy rename, jeden pracuje s regulárními výrazy, druhý ne. Na toto lze použít kterýkoli, ale volání bude trochu jiné...
6.3.2013 21:10 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin

Da sa to aj cisto v bash-i a inych shelloch tiez isto. V bash-i by to mohlo byt aj nasledovne a mozno aj jednoduchsie (aj ked rychlost nebude mozno ozdobou tohto riesenia pri velkych objemoch :) ):

cesta='path/admin'
string='.www'
maska='^.*-.*\.www\..*\.txt$'

for file in "$cesta"/*
do 
    if [[ -f "$file" && -w "$file" ]]
    then 
        if [[ "$file" =~ $maska ]]
        then 
            mv "${BASH_REMATCH[0]}" "${BASH_REMATCH[0]/$string}"
        fi
    fi
done
6.3.2013 21:24 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp

No zrovna cisto v bash-i to nie je skrz pouzitia mv. Tak kludne ostan pri rename, ak ti to vyhovuje. :)

6.3.2013 23:36 potato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
+1

Namísto spuštění jednoho rename se vytváří proces pro přejmenování každého jednotlivého souboru.
6.3.2013 23:54 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
S tym suhlasim, ale ako si mozes vsimnut, na rename moc nedal taktiez ku koncu, kedze strejda gugl vyplul nieco podobneho. A ... tak nemam co robit, tak to potom aj vyzera. :) Resp. by bolo, ale to by som sa musel citit o nieco lepsie.
6.3.2013 21:59 Vodny | skóre: 8
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
Toto si složil jen tak z hlavy?
6.3.2013 23:33 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp

Tak odniekal to musi ist. :D Na tom nie je nic zlozite. Sa vezme kazdy subor (subor, adresar, link, atd ) na zadanom umiestneni (premenna cesta), otestuje sa, ci je to skutocne subor a ci mame opravnenie na zapis. Nasledne sa overi, ci nazov suhlasi s nasim vzorcom (premenna maska ) a ak ano, tak sa odstrani nezelany retazec ( premenna string ).

6.3.2013 23:27 regulator
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Díky všem, nakonec vyřešeno in-one-line :), díky strejdo google
 for filename in aws*; do newname=`echo $filename | sed 's/\.www//g'`; mv $filename $newname; done
6.3.2013 23:50 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Hromadná změna názvu souboru dle regexp

Volat sed v tomto pripade je zbytocne, bo to je riadny kanon na tak jednoduchu vec.Ono to ide aj takto, teda pokial to moze byt bash alebo iny shell, ktory podporuje manipulaciu s retazcami na premennych. (Nechce sa mi teraz hladat, ci a ci nie je to aj v bourne shell a inych ) A nezabudni, ze dvojite uvodzovky neuskodia okolo dpremennych s nazvami suborov, inak to moze dopadnut inak nez by si si zelal.

for filename in aws*; do mv "$filename" "${filename/\.www}"; done

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.