Existuje prename , který vám umožňuje používat REGEX:
prename 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt
 Použijte volbu -n simulovat:
prename -n 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt
 Poznámka: Toto je odesláno jako rename v mnoha distribucích Linuxu, ale ne ve všech – proto používám kanonický název nástroje, který je součástí Perlu.
Navrhoval bych něco takového:
for i in *-doc-*.txt; do mv "$i" "${i/*-doc-/doc-}"; done
 ${i/*-doc-/doc-} nahradí první výskyt *-doc- s doc- .
 Pokud potřebujete provést více než jednu výměnu (viz komentář číslo 1), musíte použít ${var//Pattern/Replacement} varianta. Pokud potřebujete nahradit začátek názvu, musíte použít ${var/#Pattern/Replacement} , pokud potřebujete nahradit konec (tj. příponu), musíte použít ${var/%Pattern/Replacement} formulář. 
Další podrobnosti najdete v části Rozšíření parametrů prostředí. Toto rozšíření je specifické pro bash.
 Pokud máte rename pak rename 's/^.*-doc-/doc-/' *.txt měl by stačit.
Pokud se chcete vrátit do podadresářů, je zde také:
find . -maxdepth N -type f -name "$pattern" | sed -e 'p' -E -e "s/$str1/$str2/g" | xargs -n2 mv
 V systému, který automaticky podporuje rozšířené Regexpy, můžete -E vynechat .
Výhody:
- vrací se do podadresářů
- můžete ovládat maximální hloubku rekurze
- můžete přejmenovat soubory a/nebo adresáře (-type f|d)
Nevýhody:
- trochu složitější regulární výrazy, protože musíte odstranit cestu, abyste se dostali k názvu souboru
(odpověď upravena odtud)