긴 가변 길이 파일 이름 일괄 변경

긴 가변 길이 파일 이름 일괄 변경

기존 이름처럼 이름을 바꾸려는 디렉터리에 여러 개의 파일이 있습니다.

1937 - Snow White and the Seven Dwarves.avi
1940 - Pinocchio.avi

대상 이름:

Snow White and the Seven Dwarves (1937).avi
Pinocchio (1940).avi

건배

답변1

Perl 기반 rename(때때로 라고도 함 )을 사용하는 경우 prename이는 실제로 가능합니다 . 정규식을 알고 있다면 훨씬 더 간단합니다.

rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi

그 기능은 소스 파일 이름을 세 부분으로 나누는 것입니다. 첫 번째 예를 사용하면 다음과 같습니다.

  • 1937년
  • 백설 공주와 일곱 난장이
  • 동영상

이는 명령에서 $1, ,에 할당됩니다. $2(이것들은 변수가 아닙니다.) 그런 다음 다른 순서로 다시 합칩니다.$3renamebash

제안된 결과에 만족하면 변경 -n하거나 -v완전히 제거할 수도 있습니다.

답변2

이것이 bash 만 사용하여 수행하는 방법입니다.

cd movie_directory
ls -1 | while read line
do
  year=$(echo ${line} | awk '{print $1}')
  name=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 1)
  ext=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 2)
  newname=${name}" ("${year}")."${ext}
  mv "${line}" "${newname}"
done

가정:

.
파일 이름에는 연도 사이에 공백 문자가 포함되지 않으며 -파일 이름은 실제로 공백 tab이나 기타 인쇄할 수 없는 문자가 아닌 공백입니다.

관련 정보