
我有一個目錄樹,其中路徑元素對應於特定路徑處文件的特定屬性。例如,這樣的事情:
$ 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中建立的目錄中沒有文件,您可以改進*/*/*
或在其他地方建立目標目錄)