パス要素が特定のパスにあるファイルの特定の属性に対応するディレクトリツリーがあります。たとえば、次のようになります。
$ tree
. ─ a ─ 1 ─ y ─ 334f
│ │ └── z ─ 6410
│ └── 2 ─ y ─ e776
└── b ─ 1 ─ y ─ 9828
└── 2 ─ y ─ 0149
└── z ─ 563a
パス要素の順序を変更して(x | y)部分を最初に配置し、次に(1 | 2)、(a | b)部分を配置したいと思います。 (たとえば、必要が./a/1/y/334f
あります./y/1/a/334f
。)
完全な最終ツリーは次のようになります。
$ tree
. ─ y ─ 1 ─ a ─ 334f
│ │ └── b ─ 9828
│ └── 2 ─ a ─ e776
│ └── b ─ 0149
└── z ─ 1 ─ a ─ 6410
└── 2 ─ b ─ 563a
どうすればいいですか?
ベストアンサー1
宛先ディレクトリを作成します。
for d in */*/*;do mkdir -p $(echo $d | sed -r 's:(.+)/(.+)/(.+):\3/\2/\1/:'); done
ファイルの移動:
for d in */*/*;do mv $d/* $(echo $d | sed -r 's:(.+)/(.+)/(.+):\3/\2/\1/:'); done
(このバージョンは、手順1で作成したディレクトリにファイルがないと文句を言います。*/*/*
他の場所でターゲットディレクトリを改善または作成できます。)