내 미디어 디렉토리 구조는 다음과 같습니다.
~ $ 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"
시즌 디렉터리로 이동합니다.