Como renomear múltiplos arquivos que possuem nomes diferentes para file1, file2, file3, etc? [duplicado]

4

Digamos que eu tenha esses arquivos na minha pasta:

cat.txt
dog.txt
house.txt
tree.txt

Quero renomear todos eles para algo assim:

file1.txt
file2.txt
file3.txt
file4.txt

Isso é possível através da linha de comando?

Eu só vi perguntas sobre como renomear arquivos com algum tipo de padrão, como renomear dog1.txt , dog2.txt - > cat1.txt , cat2.txt .

    
por Denis Alves 21.07.2017 / 20:32

2 respostas

5

Use o utilitário rename para fazer isso:

rename -n '$_ = sprintf "file%d.txt", ++$::count' *

Notas

  • -n faz o comando mostrar o que acontecerá se você executá-lo. Se a saída foi o que você deseja, execute-o sem -n para realmente renomear os arquivos.
  • substitua o * pelo nome que deseja renomear, por exemplo: dog*.txt para renomear apenas dog1.txt , dog2.txt ... para file1.txt , file2.txt , etc.
  • $_ é uma entrada padrão (nomes de arquivos) que devemos modificar.
  • usando = estamos modificando
  • com sprintf estamos definindo um esquema iniciado por file seguido por %d significa um número e terminou com .txt .
  • o número (% d) será atribuído usando ++$::count , que é um contador simples iterado após cada renomeação.

A ideia vem de aqui .

    
por Ravexina 21.07.2017 / 20:59
2

pode ser feito, mas com algumas ressalvas. Você afirmou que "... esses arquivos [estão] na minha pasta", o que seria uma dessas advertências. Poderíamos usar globstar e iterar sobre os nomes de arquivos expandidos:

$ c=0;for f in *; do ((c++));  echo "$f" "--->" file"$c".txt ; done                            
cat.txt ---> file1.txt
dog.txt ---> file2.txt
house.txt ---> file3.txt
tree.txt ---> file4.txt

Claro que você pode sempre seguir o caminho "manual" através de list.txt , onde você pode armazenar uma lista de nomes de arquivos e ler esse arquivo através do while IFS= read -r ; do ... done < list.txt

$ c=0; while IFS= read -r f; do ((c++)); echo "$f" file"$c" ; done < input.txt                 
cat.txt file1
dog.txt file2
tree.txt file3

É claro que esse tema de lista pode ser estendido de várias maneiras - listas de csv, arquivos json, listas de valores-chave - o nome dele. Há muitas perguntas sobre isso online. Há, naturalmente, outras escolhas que você precisa fazer, como dar caminho completo aos arquivos ou executar tudo no mesmo diretório da lista.

Por fim, já indiquei as listas de valores-chave. Com bash e outras linguagens de script mais modernas, como Python ou Perl, você pode ter um hash (ou dicionário) com uma lista de arquivos e um novo nome correspondente que você deseja que o arquivo tenha.

    
por Sergiy Kolodyazhnyy 21.07.2017 / 20:45