交换树中的目录,从 /dir1/dir2/dir3/dir4 到 /dir1/dir2/dir4/dir3

交换树中的目录,从 /dir1/dir2/dir3/dir4 到 /dir1/dir2/dir4/dir3

我有如下目录列表:

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

还有数百个这样的。我需要改变货币的顺序,所以它变成:

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

这些目录内部有更多嵌套目录和一些文件。

我实际上想要实现的是修复统计数据中的“命名”,这是Carbon + Whisper + Graphite安装程序使用的数据存储格式。

最简单可靠的方法是什么?

答案1

鉴于上面的示例,如果您可以确保始终有 6 个目录,则可以通过执行以下操作来交换最后两个目录:

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

echo在前面扔一个mv先检查一下。

如果您无法计算目录的数量,我确信有一种更通用的方法可以“交换最后两个”,但我不知道。

相关内容