renomeia arquivos com uma mudança nos números

2

Eu quero renomear um monte de arquivos que são chamados IMG0189.jpeg IMG0190.jpeg etc para algo como IMG01.jpeg IMG02.jpeg etc respectivamente. Existe alguma maneira de fazer isso usando o comando renomear? Ou qualquer outra coisa? Eu tentei ler o manual, mas é muito breve e não dá a menor idéia sobre mudar números.

    
por Keivan 15.06.2012 / 23:12

1 resposta

5

Que tal

ls > /tmp/list ; seq -w 'ls | wc -l' | paste /tmp/list - | awk -F\t '{ print , "IMG"".jpeg"}' | xargs -n2 mv
  • Listar os arquivos e redirecionar a lista para um arquivo temporário /tmp/list
  • Escreva uma seq uence de números, preenchidos com zeros, igual ao número de arquivos para STDOUT
    • A contagem de arquivos é obtida listando os arquivos e o encanamento no aplicativo wc (contagem de palavras) no modo "linhas"
  • paste a sequência de números do comando anterior no lado direito da lista de arquivos de /tmp/list
    • Colar cola dois arquivos juntos como colunas separadas por um caractere TAB
    • Canaliza a saída para o próximo programa
  • Use um pequeno programa awk para reformatar esses dois campos
    • Separadores especificados como guia ( \t - a primeira barra é para escapar da segunda)
    • Primeiro campo , o nome do arquivo original impresso como está
    • Segundo campo , o número de sequência, impresso com um prefixo IMG e um sufixo .jpeg
    • Canaliza a saída para o próximo programa
  • Usando xargs , passe os pares de argumentos para o comando mv (mover / renomear)
    • -n2 significa que ele passará 2 deles de cada vez

NB, presume-se que os nomes dos arquivos originais não contenham espaços.

Se você quer começar em um número diferente de 1, você precisa manipular os parâmetros de seq; por exemplo,

COUNT='ls | wc -l' ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST
    
por Adrian 15.06.2012 / 23:55