파일 이름을 기반으로 디렉토리 트리 생성

파일 이름을 기반으로 디렉토리 트리 생성

다음과 같은 구조의 파일이 많이 있습니다.

[Lion] 2015 Africa Book.pdf
[Lion] 2015 Africa Magazine.pdf
[Lion] 2016 Africa Book.pdf
[Lion] 2016 Africa Magazine.pdf
[Lion] 2015 Asia Book.pdf
[Lion] 2015 Asia Magazine.pdf
[Lion] 2016 Asia Book.pdf
[Lion] 2016 Asia Magazine.pdf
[Tiger] 2016 Africa Book.pdf
[Tiger] 2016 Africa Magazine.pdf
[Tiger] 2015 Asia Book.pdf
[Tiger] 2015 Asia Magazine.pdf
[Tiger] 2016 Asia Book.pdf
[Tiger] 2016 Asia Magazine.pdf

등.

기본적으로 이러한 파일은 다음 패턴을 따릅니다.[{animal}] {year} {location} {format}.{ext}

이와 같은 디렉토리 구조를 갖도록 파일을 어떻게 이동할 수 있습니까?

Animal stuff
├── Lion
│   ├── 2015 - Africa
│   │   ├── [Lion] 2015 Africa Book.pdf
│   │   └── [Lion] 2015 Africa Magazine.pdf
│   ├── 2015 - Asia
│   │   ├── [Lion] 2015 Asia Book.pdf
│   │   └── [Lion] 2015 Asia Magazine.pdf
│   ├── 2016 - Africa
│   │   ├── [Lion] 2016 Africa Book.pdf
│   │   └── [Lion] 2016 Africa Magazine.pdf
│   └── 2016 - Asia
│       ├── [Lion] 2016 Asia Book.pdf
│       └── [Lion] 2016 Asia Magazine.pdf
└── Tiger
    ├── 2015 - Africa
    │   ├── [Tiger] 2015 Africa Book.pdf
    │   └── [Tiger] 2015 Africa Magazine.pdf
    ├── 2015 - Asia
    │   ├── [Tiger] 2015 Asia Book.pdf
    │   └── [Tiger] 2015 Asia Magazine.pdf
    ├── 2016 - Africa
    │   ├── [Tiger] 2016 Africa Book.pdf
    │   └── [Tiger] 2016 Africa Magazine.pdf
    └── 2016 - Asia
        ├── [Tiger] 2016 Asia Book.pdf
        └── [Tiger] 2016 Asia Magazine.pdf

답변1

노력하다:

find . -maxdepth 1 -type f -exec bash -c '
    animal=${1%% *}; 
    year=${1#* }; year=${year% *};
    mkdir -p "${animal//[][]}/${year/ / - }" && mv "$animal $year"'*' "${animal//[][]}/${year/ / - }/"
' _ {} \; 2> /dev/null

결과:

$ tree
.
├── Lion
│   ├── 2015 - Africa
│   │   ├── [Lion] 2015 Africa Book.pdf
│   │   └── [Lion] 2015 Africa Magazine.pdf
│   ├── 2015 - Asia
│   │   ├── [Lion] 2015 Asia Book.pdf
│   │   └── [Lion] 2015 Asia Magazine.pdf
│   ├── 2016 - Africa
│   │   ├── [Lion] 2016 Africa Book.pdf
│   │   └── [Lion] 2016 Africa Magazine.pdf
│   └── 2016 - Asia
│       ├── [Lion] 2016 Asia Book.pdf
│       └── [Lion] 2016 Asia Magazine.pdf
└── Tiger
    ├── 2015 - Asia
    │   ├── [Tiger] 2015 Asia Book.pdf
    │   └── [Tiger] 2015 Asia Magazine.pdf
    ├── 2016 - Africa
    │   ├── [Tiger] 2016 Africa Book.pdf
    │   └── [Tiger] 2016 Africa Magazine.pdf
    └── 2016 - Asia
        ├── [Tiger] 2016 Asia Book.pdf
        └── [Tiger] 2016 Asia Magazine.pdf

관련 정보