Convertendo nomes de arquivos com barras invertidas incorporadas na árvore de diretórios

0

Recentemente, extraí um arquivo ZIP que esperava conter uma hierarquia de caminhos, mas acabou sendo um arquivo simples de arquivos com barras invertidas nos nomes dos arquivos. Então acabei com algo como:

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

Todos esses são apenas irmãos no mesmo diretório único. No meu caso atual, existem várias centenas de arquivos, portanto, criar os diretórios e mover as coisas manualmente seria, na melhor das hipóteses, tedioso.

Meu plano atual é escrever um pequeno programa Python para colocá-los onde eles pertencem, mas eu queria saber, existe uma maneira mais rápida e fácil de fazer isso na linha de comando?

amacleod
fonte

Respostas:

1

Python para o resgate!

#!/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:])

Chamado como:

$ ~/scripts/tree.py *
amacleod
fonte