Řešení 1:
Psal jsem k tomu perl skripty, dokud jsem neobjevil příkaz rename.
K přejmenování přijímá regulární výraz perl:
za tímto účelem jsem právě napsal dva příkazy:
rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log
U některých distribucí však rename
tuto funkci nemá (viz jeho manuálová stránka) a možná budete muset nainstalovat perl-rename
nebo prename
.
Řešení 2:
mmv je standardní linuxový nástroj pro přesun/přejmenování více souborů. Je k dispozici z repozitářů pro většinu distribucí. Pro váš příklad výše můžete udělat:
mmv '*-Log-*-*-*-NODATA.txt' '#l1.#4#3#2.log'
Pro více informací si přečtěte tento debaday článek nebo manuálovou stránku.
Řešení 3:
Protože nemám příkaz pro přejmenování, spoléhám na toto:
for myfile in /my/folder/*; do
target=$(echo $myfile|sed -e 's/foo/bar/g')
mv "$myfile" "$target"
done
Řešení 4:
rename
util není příliš "standardní". Každá distribuce se dodává s jiným rename
nástroj. Například zde na Gentoo, rename
je z sys-apps/util-linux
balíček a nepodporuje regulární výraz.
Hamish Downer doporučeno mmv
, vypadá to užitečné, speciálně pro použití uvnitř skriptů.
Na druhou stranu, pro obecný případ můžete chtít renameutils. Má qmv
a qcp
příkazy, které otevře textový editor dle vašeho výběru (moje preference:Vim) a umožní vám tam upravit cílové názvy souborů. Po uložení a zavření editoru qmv
/qcp
provede veškeré přejmenování.
Oba mmv
a qmv
jsou dostatečně chytré na to, aby přejmenovávaly soubory ve správném pořadí a také detekovaly cyklické přejmenování, a v případě potřeby automaticky vytvoří dočasný soubor.