Altera o nome dos diretórios e o arquivo incluído

1

Em um diretório eu tenho vários subdiretórios chamados como segue (o [1-9] significa ir de 1 a 9):

AA_BB_CC_river[1-9]

Cada subdiretório contém um arquivo (ascii) com exatamente o mesmo nome do diretório. Eu cometi um erro ao nomear vários subdiretórios (e seus arquivos anexos):

AA_BB_CC_rier[1-9]

Como posso substituir rier por river no subdiretório e na nomenclatura de arquivos incluída?

    
por steve 13.11.2015 / 15:06

3 respostas

4

Se você permitir programas externos, poderá usar find e rename :

find . -type f -name '*_rier*' -exec rename 's/rier/river/g' {} \+
find . -type d -name '*_rier*' -exec rename 's/rier/river/g' {} \+

Se você não quiser usar ferramentas externas, use

# rename directories
for f in *rier*; do
  mv -- "$f" "${f/rier/river}"
done

# rename files
for f in */*rier*; do
  mv -- "$f" "${f/rier/river}"
done

Primeiro, renomeia os diretórios e, em seguida, os arquivos.

    
por 13.11.2015 / 15:30
1
for file in $(find . -depth -name '*rier*'); do 
  mv $file $(echo $file | sed -e 's/rier/river/');
done
    
por 13.11.2015 / 15:15
1

Com um loop for :

for d in AA_BB_CC_rier*; do
  [ -d "$d" ] && \
    mv -v -- "$d/$d" "$d/${d/rier/river}" && \
    mv -v -- "$d" "${d/rier/river}"
done
  • for faz um loop em todos os itens que começam com AA_BB_CC_rier .
  • [ -d "$d" ] verifica se é um diretório.
  • mv renomeia o arquivo no diretório.
  • A segunda chamada de mv renomeia o próprio diretório.
por 13.11.2015 / 15:22