Renomeia o diretório usando uma variável

1

Eu tenho um diretório que contém milhares de subdiretórios. Estrutura assim:

Dirs:

  • 1
  • 2
  • 30
  • 109

Eu quero renomear todos os diretórios adicionando 10000 ao seu nome atual. Por exemplo,

Dirs:

  • 10001
  • 10002
  • 10030
  • 10109

Eu escrevi este script

for f in *; do
    if [[ -d $f ]]; then
        echo $f
        newd='expr $f + 10000'
        echo $newd
        mv $f newd
    fi
done

do 2 echo s, eu posso ver 1 e 10001. Mas o mv realmente move todos os meus diretórios para uma nova pasta chamada newd. Eu tentei $ newd, não funciona tão bem.

O que poderia ser feito para fazer isso funcionar?

    
por Calvin 11.06.2015 / 05:14

3 respostas

2

E se você fizer isso?

for f in *; do
    if [[ -d $f ]]; then
        echo $f
        newd='expr $f + 10000'
        echo $newd
        mv "$f" "$newd"
    fi
  done

Ou seja, altere as marcas de aspas em torno de expr $f + 10000 para backticks para que elas sejam executadas no local e o resultado seja armazenado na variável. Certifique-se também de ter o cifrão em $newd na linha mv .

Não tenho 100% de certeza, portanto, faça backup antes de tentar ou experimentar alguns arquivos de teste / dirs.

Editar: adicionou aspas duplas para responder, conforme elas se tornaram necessárias.

    
por thomasrutter 11.06.2015 / 05:35
3

Tente isto:

for f in *; do 
    if [[ -d $f ]] ; then 
        mv "$f"  $(($f + 1000))
    fi
done
    
por Maythux 11.06.2015 / 08:59
2

Você também pode usar rename :

for f in *; do 
    [ -d "$f" ] && rename -n 's/$_/$_+1000/e' "$f"
done

Se você quiser renomear todos os arquivos ou diretórios, basta executar:

rename -n 's/$_/$_+1000/e' *
    
por terdon 11.06.2015 / 14:29