동일한 구조의 폴더 내에서 여러 파일 이동

동일한 구조의 폴더 내에서 여러 파일 이동

제가 작업 중인 프로젝트에는 처음에 자산이라는 디렉토리가 있습니다. 이 디렉토리에는 예측할 수 없는 이름을 가진 수많은 디렉토리가 있으며 각 디렉토리에는 이름은 같지만 내용은 다른 많은 파일이 포함되어 있습니다. 내 원래 파일 구조는 다음과 같습니다.

assets
|
|-some_dir
|  |-blue.txt
|  |-apple.txt
|  |-red.txt
|  |-banana.txt
|
|-some_other_dir
|  |-blue.txt
|  |-apple.txt
|  |-red.txt
|  |-banana.txt
...
|-yet_another_dir
|  |-blue.txt
|  |-apple.txt
|  |-red.txt
|  |-banana.txt

분명히 파일과 디렉토리에는 정확한 이름이 없습니다. 나는 파일이 동일한 디렉토리에 남아 있지만 이 디렉토리 내의 다른 디렉토리에 배치되는 새로운 파일 구조를 도입하고 싶습니다. 제 생각에는:

assets
|
|-some_dir
|  |-colors
|  |  |-blue.txt
|  |  |-red.txt
|  |-fruits
|  |  |-apple.txt
|  |  |-banana.txt
|
|-some_other_dir
|  |-colors
|  |  |-blue.txt
|  |  |-red.txt
|  |-fruits
|  |  |-apple.txt
|  |  |-banana.txt
...
|-yet_another_dir
|  |-colors
|  |  |-blue.txt
|  |  |-red.txt
|  |-fruits
|  |  |-apple.txt
|  |  |-banana.txt

자산에는 디렉토리가 너무 많아서 각 디렉토리를 수동으로 탐색하는 것은 옵션이 아니기 때문에 하나의 디렉토리에서 또는 최소한 아주 적은 수의 셸 명령(저는 zsh를 사용하고 있습니다)을 사용하여 이 작업을 수행하고 싶습니다.

reply를 사용하여 각 디렉터리에 하위 디렉터리를 만들 수 있습니다.이 문제하지만 각 파일은 이미 있는 디렉터리 내의 디렉터리로만 이동할 수 있다는 점을 염두에 두고 파일을 새 디렉터리로 이동하는 방법을 모르겠습니다.

편집: 아직 명확하지 않기 때문에 각 파일을 개별적으로(이름별로) 이동하여 올바른 순서로 정렬하고 싶지만(디렉터리당 몇 개의 파일만 있음) 각 개별 디렉토리에 대해 이 작업을 반복하지는 않습니다.

답변1

그것은 다음과 같습니다:

autoload -U zmv
mkdir-and-mv() {
  mkdir -p -- "$2:h" &&
    mv -- "$@"
}

typeset -A c
c=(
  blue   colors
  red    colors
  apple  fruits
  banana fruits
)

zmv -n -P mkdir-and-mv "(**/)((${(j:|:)${(@bk)c}}).txt)" '$1$c[$3]/$2'

( -n만족하면 테스트 실행을 위해 삭제)

관련 정보