Uma opção tardia do python:
#!/usr/bin/env python3
import os
import sys
import shutil
def path(dr, f): return os.path.join(dr, f)
dr = sys.argv[1]
for f in os.listdir(dr):
fsrc = path(dr, f)
if os.path.isfile(fsrc):
s = f[0]; target = path(dr, s.upper()) if s.isalpha() else path(dr, "#")
if not os.path.exists(target):
os.mkdir(target)
shutil.move(fsrc, path(target, f))
Como usar
- Copie o script em um arquivo vazio, salve-o como
move_files.py
-
Execute-o com o diretório como argumento:
python3 /path/to/move_files.py /path/to/files
O script criará apenas o (sub) diretório (-ies) (maiúsculo) se for realmente necessário
Explicação
O script:
-
lista os arquivos, obtém o primeiro caractere (define o sourcepath):
for f in os.listdir(dr): s = f[0]; fsrc = path(dr, f)
-
verifica se o item é um arquivo:
if os.path.isfile(fsrc):
-
define a pasta de destino para um dos dois, se o primeiro caractere for alfa ou não:
target = path(dr, s.upper()) if s.isalpha() else path(dr, "#")
-
verifica se a pasta já existe ou não, cria se não:
if not os.path.exists(target): os.mkdir(target)
-
move o item para a pasta correspondente:
shutil.move(fsrc, path(target, f))