Divida automaticamente seus arquivos em um diretório (recursivo) com um número arbitrário de arquivos por (sub) pastas / pastas por pasta superior
A maneira mais fácil e mais eficiente do IMHO é fazer com que um script reorganize os arquivos em pastas, se necessário, até camadas diferentes de níveis de diretório. Isso tornará seus arquivos navegáveis sem engasgar com nautilus.
O script abaixo fará isso para você. Ele irá criar pastas com um número arbitrário de arquivos. Essas pastas serão organizadas em subpastas se excederem um (o mesmo) número arbitrário, etc. Em outras palavras; cada (sub) nível terá o mesmo número máximo de arquivos / subdiretórios, facilitando a navegação.
Cada uma das pastas criadas mostra o número da pasta + o número de subníveis criados (onde, por exemplo, 22_1 só contém arquivos):
Oteste
Eutesteiemumdiretóriode300.000arquivos,paraserreorganizadoempedaçosde(máximo)100arquivos,paraserorganizadoemdiretóriossuperioresde(max)100pastasetc.
Demoroumenosdeumminutonomeusistema.Umtestede100.000arquivosempedaçosmenoresfoiumaquestãodesegundos.
Oscript
#!/usr/bin/env python3
import subprocess
import os
import shutil
#--- set the directory to reorganize below
dr = "/path/to/directory"
#--- set the number of files/folders per level
size = 100
level = 0
def move(fn, drn, level):
folder = dr+"/"+str(drn)+"_"+str(level)
if not os.path.exists(folder):
os.mkdir(folder)
shutil.move(dr+"/"+f, folder+"/"+f)
while len(os.listdir(dr)) > size:
level += 1
fn = 0; drn = 1
for f in os.listdir(dr):
if fn < size:
move(fn, drn, level)
else:
fn = 0
drn += 1
move(fn, drn, level)
fn += 1
Como usar
- Copie o script em uma pasta vazia e salve-o como
reorganize.py
- Na seção head, defina o caminho para o diretório, o número desejado de arquivos por subdiretório (= igual às pastas por diretório).
-
Execute-o pelo comando:
python3 /path/to/reorganize.py
Nota
O script (como é) apenas cria uma estrutura de diretórios onde cada nível tem um número definido de arquivos / pastas. Não leva em consideração nenhum tipo de organização por nome, data ou qualquer outra coisa.
EDITAR
Conforme solicitado em um comentário, um script para mover os arquivos de volta para um diretório simples após ter processado os arquivos.
O uso é praticamente o mesmo. Como diretório, defina o mesmo diretório do primeiro script, mas isso parece óbvio.
#!/usr/bin/env python3
import shutil
import os
#--- set the directory, the same as the first script
dr = "/path/to/directory"
#---
# move the files back
for root, dirs, files in os.walk(dr):
for file in files:
shutil.move(root+"/"+file, dr+"/"+file)
# remove the (now empty) subdirectories
for d in os.listdir(dr):
folder = dr+"/"+d
if os.path.isdir(folder):
shutil.rmtree(folder)
Nota
Como mencionado em um comentário, o script assume que não há risco de conflitos de nomes, uma vez que todos os arquivos inicialmente vieram do mesmo diretório (simples).