상위 폴더와 동일한 이름으로 파일 이름을 바꾸는 방법

상위 폴더와 동일한 이름으로 파일 이름을 바꾸는 방법

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.ulrename/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

관련 정보