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"))