![에피소드 이름 일괄 변경](https://linux55.com/image/148243/%EC%97%90%ED%94%BC%EC%86%8C%EB%93%9C%20%EC%9D%B4%EB%A6%84%20%EC%9D%BC%EA%B4%84%20%EB%B3%80%EA%B2%BD.png)
애니메이션인 경우 파일 이름을 자동으로 바꾸도록 bash를 만들려고 합니다.
예:
[TAG] One Piece - 01 [Quality].mkv
to:
[TAG] One Piece - S01E01 [Quality].mkv
하지만 제가 TheTVDB 시즌과 에피소드를 팔로우하기 때문에 항상 그런 것은 아닙니다. Plex에서 이 클리퍼를 사용합니다(https://github.com/ZeroQI/Absolute-Series-Scanner) 그러나 Emby를 사용하고 TheTVDB 형식에 따라 이름을 바꿔야 한다는 것을 알고 있습니다.
다른 예시:
[TAG] One Piece - 872 [Quality].mkv
to:
[TAG] One Piece - S19E93 [Quality].mkv
처음에 명확하게 설명하지 않아서 수정했습니다.
전체적으로 클리퍼와 유사한 작업을 수행하고 싶지만 가능하면 파일 이름을 변경하십시오.
답변1
가정:
- 이름을 바꿀 파일은 모두
[<tag>] <name> - <serial> [<quality>].mkv
. <name>.lst
각 애니메이션 에는 에피소드를 순서대로 나열하는 조회 파일이 있습니다 . 예를 들어 다음을One Piece.lst
포함합니다.S01E01 S01E02 ... S01E08 S02E01 ...
버전 4(최소) bash 쉘을 사용합니다.
애니메이션 비디오를 정규화하는 스크립트는 다음과 같습니다.
#!/bin/bash
# USAGE: canon_vids <dir> ...
# Canonicalize the filenames of all MKV vids in each <dir>
# All the anime lookup tables are in the lookup subdirectory
# where canon_vids is stored
lookup_dir="$(dirname "$0")/lookup"
log_skip() {
echo "SKIP ($1): $2"
}
find "$@" -name \*.mkv | while read f; do
# Check filename against our desired pattern
# (We don't want to rename what's already been renamed!)
if [[ $f =~ /(\[[^]]+\])\ (.*)\ -\ ([0-9]+)\ (\[[^]]+\].mkv) ]]; then
# We've now split our filename into:
prefix="${BASH_REMATCH[1]}"
name="${BASH_REMATCH[2]}"
serial="${BASH_REMATCH[3]##0}"
suffix="${BASH_REMATCH[4]}"
# Some sanity checks
if (( serial <= 0 )); then
log_skip "$f" "Invalid serial# '$serial' for $name"; continue
fi
# Let's look up the episode
episode="$(sed -n ${serial}p "$lookup_dir/${name}.lst")"
if [[ -z "$episode" ]]; then
log_skip "$f" "Can't find serial# '$serial' for $name"; continue
fi
mv -vn "$f" "${f%/*}/${prefix} ${name} - ${episode} ${suffix}"
fi
done
다음은 시즌당 에피소드 수를 기반으로 이러한 조회 파일을 생성하는 추가 스크립트입니다.
#!/bin/bash
# USAGE: generate_series <#eps> ...
while [[ $1 ]]; do
((s++))
for e in $(seq "$1"); do
printf "S%02dE%02d\n" $s $e
done
shift
done
모두 테스트해 보세요.
$ ls
canon_vids generate_series
# Create One Piece lookup table
$ mkdir lookup
$ ./generate_series 8 22 17 13 9 22 39 13 52 31 99 56 100 35 62 49 118 33 96 > lookup/One\ Piece.lst
$ tail -n lookup/One\ Piece.lst
S19E92
S19E93
S19E94
S19E95
S19E96
$ wc -l lookup/One\ Piece.lst
874 lookup/One Piece.lst
# Create fake One Piece MKVs (adding a couple more to trigger errors)
$ mkdir op
$ for i in $(seq 0 876); do touch "$(printf "op/[TAG] One Piece - %02d [quality].mkv" $i)"; done
$ ls op | wc -l
877
# And now, the moment of truth...
$ ./canon_vids op
renamed 'op/[TAG] One Piece - 724 [quality].mkv' -> 'op/[TAG] One Piece - S17E97 [quality].mkv'
renamed 'op/[TAG] One Piece - 86 [quality].mkv' -> 'op/[TAG] One Piece - S06E17 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 819 [quality].mkv' -> 'op/[TAG] One Piece - S19E41 [quality].mkv'
SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece
renamed 'op/[TAG] One Piece - 52 [quality].mkv' -> 'op/[TAG] One Piece - S04E05 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 865 [quality].mkv' -> 'op/[TAG] One Piece - S19E87 [quality].mkv'
SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece
renamed 'op/[TAG] One Piece - 295 [quality].mkv' -> 'op/[TAG] One Piece - S11E69 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 430 [quality].mkv' -> 'op/[TAG] One Piece - S13E49 [quality].mkv'
SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece
renamed 'op/[TAG] One Piece - 655 [quality].mkv' -> 'op/[TAG] One Piece - S17E28 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 93 [quality].mkv' -> 'op/[TAG] One Piece - S07E02 [quality].mkv'
renamed 'op/[TAG] One Piece - 278 [quality].mkv' -> 'op/[TAG] One Piece - S11E52 [quality].mkv'
# OK, but what happens when we run it again? Will our files be further renamed? Will Luffy find One Piece?
$ ./canon_vids op
SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece
SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece
SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece
# Of course! Those files were never found in the lookup table, so they're still
# candidates for renaming. More importantly, no other files were touched.