Como renomear um lote de arquivos via CLI quando houver espaço envolvido

1

Eu tenho um monte de arquivos que são assim:

x54y65.dat

e quero prefixá-los com uma frase específica para que pareçam assim:

some prefix - x54y65.dat

É esse espaço depois do hífen que está me pegando.

Eu tentei:

 mv * some\ prefix\ -\ *

mas isso não funcionou. Como eu faço isso? Obrigado

    
por bcsteeve 04.11.2013 / 02:34

3 respostas

4

Embora a resposta do autor original esteja correta, acho melhor explicar por que o comando mv listado na pergunta não funciona.

O problema é um mal-entendido básico sobre a maneira como um shell Unix funciona - o que é bastante diferente da linha de comando do DOS. Os caracteres especiais (*,?, Etc.) que selecionam múltiplos arquivos (eles são chamados de 'glob') funcionam no nível do shell, não dos comandos. Então o primeiro comando é expandido pelo shell para

mv x54y56.dat x57y58.dat x59y60.dat "some prefix - *"

Suponho que no diretório você tenha apenas esses três arquivos para simplificar, e que não tenha nenhum arquivo que corresponda ao nome de "some prefix - " pattern --- para que o shell provavelmente o deixe como está. (Eu estou usando as aspas para incorporar espaços, acho mais fácil de ler do que folgas, embora os detalhes estão no manual para o seu shell).

Agora, mv a b c d tentará mover os arquivos a , b , c para o diretório d e falhará --- porque d não existe.

A solução rename , se você tiver o comando rename , é o caminho certo. Como o OP encontrou,

rename 's//some prefix - /' *.dat

funciona bem. Nos velhos bons dias, você deveria fazer

for i in *.dat; do
  mv "$i" "some prefix - $i"
done

para apenas fazer um movimento no momento.

    
por Rmano 04.11.2013 / 16:30
2
rename 's//some prefix - /' *.dat

Isso usa a sintaxe do tipo regex para renomear todos os arquivos com a extensão especificada (.dat) em uma linha. Ele lida com espaços facilmente, já que leva qualquer caractere encapsulado pelo /

    
por bcsteeve 04.11.2013 / 15:52
1
mv x54y65.dat "some prefix - x54y65.dat"
    
por andr3w 04.11.2013 / 08:55