Reordenar elementos de caminho de uma árvore de diretórios

2

Eu tenho uma árvore de diretórios onde os elementos de caminho correspondem a propriedades específicas do arquivo em um determinado caminho. Por exemplo, algo assim:

$ tree 
. ─ a ─ 1 ─ y ─ 334f
│   │   └── z ─ 6410
│   └── 2 ─ y ─ e776
└── b ─ 1 ─ y ─ 9828
    └── 2 ─ y ─ 0149
        └── z ─ 563a

Eu quero mudar a ordem dos elementos do caminho para colocar a parte (x | y) primeiro, depois (1 | 2), depois (a | b). (Por exemplo, ./a/1/y/334f deve se tornar ./y/1/a/334f .)

A árvore final completa deve ser:

$ tree
. ─ y ─ 1 ─ a ─ 334f
│   │   └── b ─ 9828
│   └── 2 ─ a ─ e776
│       └── b ─ 0149
└── z ─ 1 ─ a ─ 6410
    └── 2 ─ b ─ 563a

Como faço isso?

    
por AJMansfield 21.11.2017 / 18:58

1 resposta

3

Crie os diretórios de destino:

for d in */*/*;do mkdir -p $(echo $d | sed -r 's:(.+)/(.+)/(.+):///:'); done

Mova os arquivos:

for d in */*/*;do mv $d/* $(echo $d | sed -r 's:(.+)/(.+)/(.+):///:'); done

(esta versão reclamará que não há arquivos nos diretórios criados na etapa 1, você pode melhorar o */*/* ou criar os diretórios de destino em outro lugar)

    
por 21.11.2017 / 21:25