movies
많은 하위 폴더가 포함된 Ubuntu라는 폴더가 있습니다 .
각 하위 폴더에는 1개의 mp4 파일이 포함되어 있으며 다른 파일(jpg, srt)이 포함될 수 있습니다.
각 하위 폴더의 제목 형식은 다음과 같습니다.
My Subfolder 1 (2001) Bla Bla
My Subfolder 2 (2000) Bla
My Subfolder 3 (1999)
mp4 파일의 이름을 상위 폴더와 동일하게 바꾸되 연도와 blabla는 제외하는 방법은 무엇입니까?
예를 들어 위 하위 폴더의 mp4는 다음과 같습니다.
My Subfolder 1.mp4
My Subfolder 2.mp4
My Subfolder 3.mp4
mp4를 하위 폴더에 유지하고 싶습니다. 이름만 변경됩니다. 연도는 항상 괄호 안에 있습니다.
답변1
bash 솔루션은 다음과 같습니다.
cd movies
for mp4 in */*.mp4
do
if [[ $mp4 =~ ^(.*)\ \( ]]
then
echo mv -- "$mp4" ...to... "${mp4%%/*}/${BASH_REMATCH[1]}".mp4
fi
done
이는 "movies"의 모든 하위 디렉터리에 있는 모든 mp4 파일을 반복하고 패턴 일치 테스트를 적용합니다. 일치하는 경우:
^
- 처음부터(.*)
- 원하는 만큼의 문자를 캡처하고 저장하세요.\ \(
- 뒤에 공백과 여는 괄호가 옵니다.
일치가 성공하면 디렉토리에서 예상한 패턴의 mp4 파일을 찾은 것입니다. Bash는 괄호로 묶인 일치 항목을 $BASH_REMATCH
배열 변수 에 저장하므로 mv
원래 파일 이름과 함께 결합된 새 이름을 사용하여 호출합니다.
${mp4%%/*}
원래 디렉토리 이름입니다/
/ - 디렉토리 구분 기호${BASH_REMATCH[1]}".mp4
- 위에서 저장한 부분, 접미사 포함.mp4
결과가 올바르면 echo
및 ...to...
부분을 제거하십시오.
답변2
perl
이름 바꾸기 유틸리티를 사용하십시오 .
rename 's/\(\d\d\d\d\)//' */*.mp4
테스트 실행을 통해 결과를 확인하려면 -n
(일명 --nono
) 옵션을 사용하세요.
rename -n 's/\(\d\d\d\d\)//' */*.mp4
Debian(및 Ubuntu 등)에서는 Perl 기반 이름 바꾸기가 file-rename
패키지에 있습니다. prename
또는 이라고 부를 수도 있습니다 file-rename
.
그런데 이 이름 바꾸기 버전의 매우 유용한 기능은 파일 이름의 sed
스타일 을 바꾸는 것이 쉽지만 실제로 수정된 Perl 코드를 사용하여 파일 이름을 바꿀 tr
수 있다는 것입니다 . 심지어 복잡한 스크립트도 마찬가지입니다.$_
매뉴얼 페이지에서:
rename
첫 번째 인수로 지정된 규칙에 따라 제공된 파일 이름을 바꿉니다. 인수는 파일 이름을 지정하는 Perl 문자열 중 적어도 일부를 수정할 것으로perlexpr
예상되는 Perl 표현식입니다 .$_
주어진 파일 이름이 표현식에 의해 수정되지 않으면 이름이 바뀌지 않습니다. 명령줄에 파일 이름이 지정되지 않으면 표준 입력에서 파일 이름을 읽습니다.예를 들어, 확장자를 제거하기 위해 "*.bak"와 일치하는 모든 파일의 이름을 바꾸려면 다음과 같이 말할 수 있습니다.
rename 's/\.bak$//' *.bak
대문자 이름을 소문자 이름으로 변환하려면 다음을 사용할 수 있습니다.
rename 'y/A-Z/a-z/' *
패키지에 포함된 버전(일반적으로 이름이 지정됨 ) rename
을 포함하여 완전히 다른 명령줄 옵션과 매개 변수를 가진 다른 버전이 있다는 점에 유의하세요 . 사용하기 전에 어떤 버전을 설치했는지 확인하는 것이 중요합니다 . 더 정확하게는 어떤 버전이 호출되거나 심볼릭 링크되어 있는지 확인하는 것이 중요합니다.util-linux
/usr/bin/rename.ul
rename
/usr/bin/rename
Debian, Ubuntu 및 관련 시스템에서는 다음을 확인할 수 있습니다 update-alternatives
.
# update-alternatives --display rename
rename - auto mode
link best version is /usr/bin/file-rename
link currently points to /usr/bin/file-rename
link rename is /usr/bin/rename
slave rename.1.gz is /usr/share/man/man1/rename.1.gz
/usr/bin/file-rename - priority 70
slave rename.1.gz: /usr/share/man/man1/file-rename.1p.gz