renomeação de vários arquivos com base na data de modificação

1

Procurei na Web em vários sites, mas não consigo encontrar uma solução e a página de manual não está clara (sou iniciante no CLI). Este é o meu problema: eu tenho cerca de 200 arquivos em um diretório, esses arquivos não têm extensões e são nomeados incorretamente.

Para simplificar, imagine todos os arquivos como:

Delta ---   2.0K ---  01/01/1993
Gamma ---   2.1k ---  01/01/1991
Alfa  ---   2.2k ---  04/15/1992
Bravo ---   2.3k ---  04/10/1992

O que estou tentando fazer é:

renomeie todos os arquivos dessa forma 1, 2, 3, .., mas tal que o nome seja definido de acordo com a data completa (não apenas o ano ou o mês), então a saída deve ser parecida com

1 ---   2.1k ---  01/01/1991
2 ---   2.3k ---  04/10/1992
3 ---   2.2k ---  04/15/1992
4 ---   2.0k ---  01/01/1993

Além disso, quero adicionar uma extensão, por exemplo, .TXT, para que a saída final seja:

1.txt ---   2.1k ---  01/01/1991
2.txt ---   2.3k ---  04/10/1992
3.txt ---   2.2k ---  04/15/1992
4.txt ---   2.0k ---  01/01/1993
    
por simple mind 17.11.2014 / 00:58

2 respostas

2

Tendo feito algo assim antes, posso garantir que é fácil criar um erro de digitação que lhe dará um problema ainda maior que você já tem. Use esta informação por sua conta e risco.

No prompt bash;

i=0 ; for f in 'ls -rt' ; do i=$(expr $i + 1); mv $f $i.txt; done
  • i age como um contador
  • ls -rt lista os arquivos na ordem inversa pelo tempo modificação - se você copiou, moveu ou modificou os arquivos de outra forma, isso pode não fornecer a ordem de arquivo esperada. Verifique com cuidado executando ls -rt como um comando separado e verifique-o duas vezes.
  • for f in ls -rt ; do itera da lista de arquivos com 'f' assumindo cada nome de arquivo
  • i=$(expr $i + 1) incrementa o contador
  • mv $f $i.txt renomeia o arquivo usando o contador e adicionando a extensão .txt
  • done fecha o ciclo
  • observe que os comandos no loop são separados por ponto e vírgula, portanto, se você adicionar outro comando, siga-o com um ponto-e-vírgula
por CAB 17.11.2014 / 02:22
0

Através do python,

script.py

import os
import shutil
directory = sys.argv[1]
count = '0'
for item in os.listdir(directory):
    count = str(int(count)+1)
    newname = re.sub(r'.*', count+'.txt', item)
    shutil.move(directory+"/"+item, directory+"/"+newname)

Como correr?

python3 script.py /path/to/the/directory
    
por Avinash Raj 17.11.2014 / 08:18