현재 작업 디렉토리에 4개의 폴더가 있습니다. 각 폴더에는 다음 형식으로 명명된 여러 파일이 포함되어 있습니다.
HEXA DECA - Season 01 Episode 01 - name of episode
HEXA DECA - Season 01 Episode 02 - name of episode
이름을 다음으로 바꾸고 싶습니다.
HE'XA DECA - S01E01 - name of episode
HE'XA DECA - S01E02 - name of episode
sed
나에게는 조금 너무 어려운 일이다. 이를 달성하는 가장 좋은 방법은 무엇입니까?
답변1
나는 이것이 vidir
이러한 문제에 대한 가장 유연하고 투명한 해결책이라는 것을 알았습니다. 여기서 VIM이나 다른 편집기를 사용하여 파일 이름으로 텍스트 파일을 편집하면 변경 사항이 적용됩니다.
답변2
개인적으로 저는 mmv
그런 작업에 사용합니다. 다른 사람들이 사용하는 것 rename
. 내 시도(분명히 테스트되지 않았으므로 해당 -n
옵션을 먼저 시도했습니다):
for dir in ....; do
( cd "$dir"; mmv -r "HEXA DECA - Season ?? Episode ?? - *" "HE'XA DECA - S#1#2E#3#4 - #5" )
done
내가 cd
먼저 들어가서 이러지 $dir
않아도 mmv "$dir/..."
괜찮아요 . 이는 디렉터리에 ?
또는 같은 mmv용 특수 문자가 포함되는 것을 방지하기 위한 것입니다 *
.
답변3
rename
이 명령은 필요한 작업을 수행합니다.
find . -type f -exec rename "s/^(.*\/)HEXA DECA - Season ([0-9]*) Episode ([0-9]*) (.*)\$/\$1HE'XA DECA - S\$2E\$3 \$4/" {} \;
작은따옴표로는 이스케이프할 수 없지만 큰따옴표에서는 문자를 '
이스케이프해야 하기 때문에 백슬래시가 필요합니다 .$
여기서는 디렉터리와 하위 디렉터리의 모든 파일을 찾아 이름을 바꾸려고 합니다.
s/regexp/smth
모든 regexp
일치 항목을 smth
.
^(.*\/)
는 경로의 첫 번째 부분으로, 기본 이름이 없는 모든 항목이 \$1
.
HEXA DECA - Season
및 Episode
저장되지 않는 부분이지만 매칭에 사용되는 템플릿입니다.
([0-9]*)
\$2
s는 sum 에 저장된 시즌과 에피소드의 수입니다 \$3
.
(.*)$
에피소드 이름이 포함된 문자열의 마지막 부분입니다 \$4
.
두 번째 부분에서는 s를 보고 싶은 패턴으로 바꿉니다 s///
.\$N