Renomeia vários diretórios inserindo entre

1

Tenho centenas de diretórios que preciso renomear, da seguinte maneira:

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

Então, eu tenho que inserir 'adj' entre o número e a palavra.

O que eu fiz, mas não está indo bem

for dic in [0-9]*
do
m='echo "$dic" | cut -d"_" -f1'
l='echo "$dic" | cut -d"_" -f2'
mv "$dic" "${m}_adj_${l}"
done 
    
por Firefly 25.08.2016 / 16:34

3 respostas

1

Eu não pude ver o problema em seu script, mas não sabendo todos os diretórios que você tem, eu não sei o que você está enfrentando. Mas algo assim pode ajudar:

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

Fedora, Debian e derivados (Ubuntu, Mint,…) instalaram por padrão um comando chamado rename ou prename para a versão Perl que faz isso para você, funciona assim:

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

Você pode fazer algo mais complexo para encontrar e renomear seus arquivos com mais controle, como:

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

Nota: para prename , o primeiro argumento é o código Perl.

    
por 25.08.2016 / 16:46
0

Em sistemas Linux não embarcados, você pode usar o comando rename , que é muito simplista, mas bom o suficiente para este caso. Para substituir o primeiro _ por _adj em todos os arquivos no diretório atual cujo nome começa com um dígito:

rename _ _adj_ [0-9]*

No Debian e derivados (Ubuntu, Mint,…), este comando é chamado rename.ul . O comando rename desta distribuição é diferente e mais poderoso, que também é chamado prename ; seu primeiro argumento é o código perl . Para substituir _ por _adj_ :

prename 's/_/_adj_/' [0-9]*
    
por 26.08.2016 / 00:31