Renomeia várias pastas usando o shell script sem corresponder a um padrão

0

Como renomear várias pastas / arquivos por usuário definido.

Diga por exemplo Eu tenho várias pastas como krish, moorthy, ravi, robert, etc.

Eu quero renomear todos esses diretórios como script_1, script_2, script_3 etc

Eu testei abaixo do script, mas ele não produz uma saída

para i in * do mv $ * $ script _ '$ i' concluído

durante a execução, diz que não pode se mover, não pode indicar *

Por favor me ajude a passar por isso.

    
por Krishna Moorthy 25.07.2015 / 16:32

2 respostas

1

Há tantas coisas erradas em seu roteiro que é difícil saber por onde começar.

Primeiro, a sintaxe precisa de marcadores de fim de linha:

for i in *; do mv $* $script_'$i'; done

Agora, o parâmetro mv 1 precisa ser o nome do arquivo atual:

for i in *; do mv $i $script_'$i'; done

Em seguida, o parâmetro mv 2 tem três erros ( $script_ expande a variável inexistente script_ ; as aspas em '$i' fazem dele um literal; e você precisa de uma segunda variável com uma contagem para expandir para o nome que você quer), então você precisa de algo como:

n=1; for i in *; do mv $i script_$n; ((++n)); done

Isso funcionará, desde que não haja espaços em branco nos nomes dos arquivos e desde que não haja arquivos não-diretório no diretório atual. Então, finalmente chegamos a:

n=1; for i in *; do if [ -d "$i" ]; then mv "$i" script_$n; ((++n)); fi; done
    
por 25.07.2015 / 17:06
0

perl-rename é bem adequado para isso:

$ cd -- "$(mktemp --directory)"
$ mkdir foo bar baz
$ perl-rename --dry-run --verbose 's/.*/sprintf "script_%04d", ++$main::Mad/e' ./*/
./bar/ -> script_0001
./baz/ -> script_0002
./foo/ -> script_0003
    
por 25.07.2015 / 16:56

Tags