디렉토리 트리의 경로 요소 재정렬

디렉토리 트리의 경로 요소 재정렬

경로 요소가 특정 경로에 있는 파일의 특정 속성에 해당하는 디렉터리 트리가 있습니다. 예를 들어 다음과 같습니다.

$ 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단계에서 생성된 디렉토리에 파일이 없다고 불평합니다. */*/*다른 곳에서 대상 디렉토리를 개선하거나 생성할 수 있습니다.)

관련 정보