O script abaixo renomeia todos os arquivos em um diretório, para o id na segunda string encontrada, começando com ProcID: :
1. Renomeando para o id na segunda string correspondente (literalmente; sem extensão)
#!/usr/bin/env python3
import shutil
import os
import sys
dr = sys.argv[1]
for f in os.listdir(dr):
file = os.path.join(dr, f)
try:
# only rename if the second instance exists
new = [s for s in open(file).read().split() if s.startswith("(ProcID:")][1]
except (IndexError, IsADirectoryError):
pass
else:
# rename the file
shutil.move(file, os.path.join(dr, new.split(":")[-1].strip()[:-1]))
Para usar
- Copie o script em um arquivo vazio, salve-o como
rename_files.py -
execute-o com o diretório como argumento:
python3 /path/to/rename_files.py /path/to/directory_with_files
Notas
- O script assume o formato (exato):
ProcID:0000014778 - O script não renomeia os arquivos se não houver uma segunda instância de
ProcID(ou nenhum)
2. Renomeie apenas os arquivos .txt e mantenha a extensão
... Em seguida, use a versão abaixo, ela só renomeia .txt arquivos e mantém a extensão no arquivo renomeado. O uso é exatamente o mesmo.
#!/usr/bin/env python3
import shutil
import os
import sys
dr = sys.argv[1]
for f in os.listdir(dr):
file = os.path.join(dr, f)
try:
# only rename is the second instance exists
new = [s for s in open(file).read().split() if all([
s.startswith("(ProcID:"), f.endswith(".txt")
])][1]
except (IndexError, IsADirectoryError):
pass
else:
shutil.move(file, os.path.join(dr, new.split(":")[-1].strip()[:-1]+".txt"))
O que o script faz
-
lista os arquivos no diretório:
for f in os.listdir(dr) -
lista as strings dentro do arquivo, começando com
ProcID:new = [s for s in open(file).read().split() if s.startswith("(ProcID:")][1]O final
[1]extrai a segunda ocorrência de strings, começando comProcID:([0]é o primeiro) -
divisões do id:
new.split(":")[-1].strip() -
e renomeia o arquivo, usando o id:
shutil.move(file, os.path.join(dr, new.split(":")[-1].strip()[:-1]))
EDITAR
Versão Python2 do script 1. O OP possui o python2 instalado, que requer IOError em vez de IsADirectoryError para evitar erros caso o script seja executado em um diretório em vez de um arquivo.
#!/usr/bin/env python
import shutil
import os
import sys
dr = sys.argv[1]
for f in os.listdir(dr):
file = os.path.join(dr, f)
try:
# only rename if the second instance exists
new = [s for s in open(file).read().split() if s.startswith("(ProcID:")][1]
except (IndexError, IOError):
pass
else:
# rename the file
shutil.move(file, os.path.join(dr, new.split(":")[-1].strip()[:-1]))
... e por estar completo, uma versão python2 do segundo script:
#!/usr/bin/env python
import shutil
import os
import sys
dr = sys.argv[1]
for f in os.listdir(dr):
file = os.path.join(dr, f)
try:
# only rename is the second instance exists
new = [s for s in open(file).read().split() if all([
s.startswith("(ProcID:"), f.endswith(".txt")
])][1]
except (IndexError, IOError):
pass
else:
shutil.move(file, os.path.join(dr, new.split(":")[-1].strip()+".txt"))