Cambiar el nombre de varios directorys insertando entre

Tengo cientos de directorys que necesito cambiar el nombre de la siguiente manera:

from 15_öblös to 15_adj_öblös from 14_kies to 14_adj_kies and so on... 

Entonces, tengo que insert 'adj' entre el número y la palabra.

Lo que he hecho, pero no está yendo bien

 for dic in [0-9]* do m=`echo "$dic" | cut -d"_" -f1` l=`echo "$dic" | cut -d"_" -f2` mv "$dic" "${m}_adj_${l}" done 

No pude ver el problema en su script, pero no conocía todos los directorys que tenía, no sé a qué se enfrenta. Pero algo como esto podría ayudar:

 find ./ -maxdepth 1 -type d | while read dirname do newdirname=$(echo ${dirname} | sed -e "1,1s/_/_adj_/") mv ${dirname} ${newdirname} done 

Fedora, Debian y sus derivados (Ubuntu, Mint, …) han instalado por defecto un command llamado rename o prename para la versión de Perl que hace esto por usted, funciona así:

 prename 's/_/_adj_/' * # OR rename 's/_/_adj_/' * 

Puede hacer algo más complejo para encontrar y cambiar el nombre de sus files con más control como:

 prename 's/(\d+)_/$1_adj_/' * # OR rename 's/(\d+)_/$1_adj_/' * 

Nota: para prename , el primer argumento es código Perl.

En los sistemas Linux no integrados, puede usar el command de rename , que es muy simple pero lo suficientemente bueno para este caso. Para replace el primer _ por _adj en todos los files del directory actual cuyo nombre comienza con un dígito:

 rename _ _adj_ [0-9]* 

En Debian y derivados (Ubuntu, Mint, …), este command se llama rename.ul . El command de rename de rename esta distribución es diferente, más poderoso y también se llama prename ; su primer argumento es el código perl . Para replace _ por _adj_ :

 prename 's/_/_adj_/' [0-9]*