Troque diretórios na árvore, de / dir1 / dir2 / dir3 / dir4 para / dir1 / dir2 / dir4 / dir3

3

Eu tenho uma lista de diretórios como:

  • stats/gauges/stock/market/PLN/EUR/*
  • stats/gauges/stock/market/USD/EUR/*
  • stats/gauges/stock/market/PLN/CZK/*

e centenas como esses. Eu preciso mudar para a ordem das moedas, por isso, torna-se:

  • stats/gauges/stock/market/EUR/PLN/*
  • stats/gauges/stock/market/EUR/USD/*
  • stats/gauges/stock/market/CZK/PLN/*

Dentro desses diretórios, há mais diretórios aninhados e alguns arquivos.

O que estou tentando alcançar é corrigir os "nomes" nas minhas estatísticas. Esse é o formato de armazenamento de dados usado por Carbon + Whisper + Graphite setup.

Qual seria a maneira mais fácil e confiável de fazer isso?

    
por NeverEndingQueue 19.01.2017 / 19:25

1 resposta

0

Dado o seu exemplo acima, se você pode ter certeza de que há sempre 6 diretórios, você pode trocar os dois últimos fazendo algo assim:

find stats -mindepth 5 -maxdepth 5 -type d \    # (Or some other way of generating your list of directories)
| while read dir
do
     mv -v "$dir" "$(echo $dir | awk -F '/' '{ print $1"/"$2"/"$3"/"$4"/"$6"/"$5 }')"
done

Jogue um echo na frente de mv para verificá-lo primeiro.

Se você não puder contar com o número de diretórios, tenho certeza de que há uma maneira mais genérica de simplesmente "trocar os dois últimos", mas não sei de cima para o alto.

    
por 20.01.2017 / 06:50