디렉토리 내용을 정적으로 명명된 하위 디렉토리로 이동

디렉토리 내용을 정적으로 명명된 하위 디렉토리로 이동

내 미디어 디렉토리 구조는 다음과 같습니다.

~ $ tree baz
baz
├── Ajin [Season 1]
│   ├── Ajin Demi-Human - 01 - A Topic That Has Nothing to Do with Us.mkv
│   ├── Ajin Demi-Human - 02 - Why Is This Happening to Me I Didn`t Do Anything Wrong!.mkv
...snip...
├── Btooom!
│   ├── Btooom! - 01 - Start.mkv
│   ├── Btooom! - 02 - The Bloodstained High School Girl.mkv
...snip...
└── Claymore [Dual Audio]
    ├── checksums.md5
    ├── Claymore - 01 - Great Sword.mkv
    ├── Claymore - 02 - The Black Card.mkv
    ├── Claymore - 03 - The Darkness in Paradise.mkv
...snip...

3 directories, 53 files

디렉터리를 순환 baz하고 각 하위 디렉터리에 대해 "Season 01"이라는 하위 하위 디렉터리를 만들고 모든 파일(및 모든 디렉터리)을 새로 만든 하위 하위 디렉터리인 "Season 01"에 넣어야 합니다.

예를 들어 위의 내용은 다음과 같습니다.

baz
├── Ajin [Season 1]
│   ├── Season 01
│       ├── Ajin Demi-Human - 01 - A Topic That Has Nothing to Do with Us.mkv
│       ├── Ajin Demi-Human - 02 - Why Is This Happening to Me I Didn`t Do Anything Wrong!.mkv
...snip...
etc

이 작업을 수행 하려고 하는데 find-exec 명령을 구성하여 "Season 01" 디렉터리를 만들고 해당 디렉터리의 내용을 새 디렉터리로 이동하는 방법을 알 수 없습니다.

감사해요

답변1

필요한 것은 간단한 루프뿐입니다.

cur=$(pwd)
for i in baz/*
do
    cd "$i"
    mkdir season1
    mv *.mkv season1
    cd "$cur"
done

답변2

사용 bash:

shopt -s dotglob
for i in baz/*/*; do
  mkdir -p "${i%/*}/Season 01"
  mv "$i" "${i%/*}/Season 01"
done

먼저 dotglob숨겨진 파일 일치도 활성화하십시오. 그런 다음 baz하위 디렉터리의 파일을 반복합니다.

  • Season 01디렉터리가 아직 존재하지 않으면 디렉터리가 생성됩니다. 매개변수 확장은 ${i%/*}파일 이름을 제거하고 상위 디렉토리(예: baz/Ajin [Season 1])를 유지합니다.
  • 현재 파일을 "$i"시즌 디렉터리로 이동합니다.

관련 정보