Inverte as últimas duas subpastas da estrutura de diretórios

0

Basicamente, solicito uma maneira unix (bash, perl, etc) para inverter as duas últimas subpastas, como nesta pergunta do windows: link Este é um exemplo, o objetivo é modificar o caminho de muitos arquivos.

i.e. 
/dir1/dir2/dir3/dir4/myfile
to:
/dir1/dir2/dir4/dir3/myfile
    
por Ferroao 23.01.2018 / 22:18

1 resposta

0

Para uma solução com quatro subdiretórios, você pode usar algo assim:

for p4 in */*/*/*
do
    p3="${p4%/*}" p2="${p3%/*}" d4="${p4/*\/}" d3="${p3/*\/}"
    mv "$p4" "$p3/$d3" && mv "$p3" "$p2/$d4"
done

Não faz nenhum erro ao verificar a presença de um diretório de destino antes de tentar a transposição. Nessa situação, você terminará com o terceiro diretório de nível sendo duplicado. Por exemplo, a/b/d existe e vamos transpor a/b/c/d , acabaremos com a/b/d/c/c .

Se você tiver muitos diretórios correspondentes a */*/*/* , você poderá dividi-lo ainda mais com um loop adicional por nível. Com cuidado, isso evitará a necessidade de obter os caminhos $p2 e $p3 .

    
por 24.01.2018 / 01:19