Mover arquivos do subdiretório mais baixo para um nível
O script abaixo pesquisa um diretório para o subdiretório menor (= sem subdiretórios) de forma recursiva e move todos os arquivos encontrados na (s) pasta (s) para um nível, como solicitado em Os objetivos são mover arquivos para fora da pasta de nível mais baixo, fazer o backup de um diretório :
#!/usr/bin/env python2
import shutil
import os
import sys
directory = sys.argv[1]
for root, dirs, files in os.walk(directory):
for dr in dirs:
dr = root+"/"+dr
# find folders without subfolders (= lowest level)
if len(next(os.walk(dr))[1]) == 0:
# direct superior directory
up = dr[:dr.rfind("/")]
# move files from lowest level one level up
for f in os.listdir(dr):
shutil.move(dr+"/"+f, up+"/"+f)
Para usar:
- Copie o script em um arquivo vazio, salve-o como
reorganize.py
-
Execute-o pelo comando:
python /path/to/reorganize.py <directory_to_reorganize>
Se o nome do seu diretório (para reorganizar) contiver espaços, use aspas:
python /path/to/reorganize.py '<directory_to_reorganize>'
EDITAR
Como mencionado em um comentário, com uma pequena alteração, o script pode ser usado apenas para mover arquivos de uma pasta nome para um nível acima. A maneira mais eficaz é fazer isso diretamente após
for dr in dirs:
Então o script seria:
#!/usr/bin/env python3
import shutil
import os
import sys
directory = sys.argv[1]
for root, dirs, files in os.walk(directory):
for dr in dirs:
if dr == "<folder_name>":
dr = root+"/"+dr
# direct superior directory
up = dr[:dr.rfind("/")]
# move files from lowest level one level up
for f in os.listdir(dr):
shutil.move(dr+"/"+f, up+"/"+f)