Convertir nombres de archivos con barras invertidas incrustadas al árbol de directorios

0

Recientemente extraje un archivo ZIP que esperaba que contenga una jerarquía de rutas, pero resultó ser un archivo plano de archivos con barras invertidas en los nombres de archivo. Así que terminé con algo como:

$ ls -1d ./*
SomeFile.txt
Foo\OtherFile.png
Bar\Baz\Faz\foo.txt

Todos estos son solo hermanos en el mismo directorio único. En mi caso real, hay varios cientos de archivos, por lo que crear directorios y mover cosas a mano sería, en el mejor de los casos, tedioso.

Mi plan actual es escribir un pequeño programa de Python para ponerlos a todos en su lugar, pero me preguntaba: ¿hay alguna forma más rápida de hacerlo desde la línea de comandos?

    
pregunta amacleod 14.03.2014 - 16:26

1 respuesta

1

Python al rescate!

#!/usr/bin/env python
import sys, os, os.path

def treeify(filenames):
    for fn in filenames:
        parts = fn.split("\")
        pathparts = parts[:-1]
        basename = parts[-1]
        path = ensurepath(pathparts)
        os.rename(fn, os.path.join(path, basename))

def ensurepath(parts):
    if len(parts) == 0:
        return "."
    path = os.path.join(*parts)
    if not os.path.exists(path):
        os.makedirs(path)
    return path

if __name__ == "__main__":
    treeify(sys.argv[1:])

Se invoca como:

$ ~/scripts/tree.py *
    
respondido por el amacleod 14.03.2014 - 16:46

Lea otras preguntas en las etiquetas