O script abaixo move todos os arquivos de um diretório, contendo suas 535 pastas, (recursivamente) em outro (único) diretório, mantendo o nome do arquivo original.
Em caso de duplicatas
(Apenas) no caso de nomes duplicados, os arquivos serão renomeados para duplicate_1_[filename]
, duplicate_2_[filename]
etc.
Como usar
Copie o script abaixo em um arquivo vazio, salve-o como rearrange.py
, defina os caminhos corretos para a origem e o destino (diretórios) e execute-o por:
python rearrange.py
O script:
#!/usr/bin/env python
import os
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/sourcedirectory"
target_dir = "/path/to/destination"
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
n = 1; name_orig = name
while os.path.exists(target_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig; n = n+1
newfile = target_dir+"/"+name; shutil.move(subject, newfile)
Para o terminal (gnome-) - funcionalidade "arrastar e soltar":
Use a versão abaixo, salve-a como descrito acima (mas não mude nada) e torne-a executável. Para usá-lo, abra uma janela de terminal, arraste o script sobre a janela do terminal e, em seguida, o diretório de origem, o último destino. O comando que você verá no seu terminal:
rearrange.py /path/to/source /path/to/destination
Pressione para retornar e pronto.
O script:
#!/usr/bin/env python
import os
import shutil
import sys
# --------------------------------------------------------
reorg_dir = sys.argv[1]
target_dir = sys.argv[2]
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
n = 1; name_orig = name
while os.path.exists(target_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig; n = n+1
newfile = target_dir+"/"+name; shutil.move(subject, newfile)
Copiar em vez de mover
Se você quiser manter seu diretório atual intocado e apenas copiar os arquivos em um novo diretório, simplesmente substitua a última (seção de) linha:
substituir:
shutil.move(subject, newfile)
por:
shutil.copy(subject, newfile)