파일 이름이 n자를 초과하면 마지막 문자를 제거합니다.

파일 이름이 n자를 초과하면 마지막 문자를 제거합니다.

저는 유닉스 쉘을 처음 접했고 제 질문에 대한 답을 찾을 수 없는 것 같습니다.

여러 파일이 포함된 폴더가 있습니다. 올바른 파일 이름에는 정확히 13자(숫자 + 문자 + 밑줄)가 포함됩니다. 예를 들어:

1305359000_PS.JPG

일부 파일의 이름이 올바르게 지정되지 않았습니다. 오류는 항상 마지막 문자에 있습니다. 예:

9009015000_PS_1.jpg

내 폴더의 모든 파일에 대해 작동하는 찾기/바꾸기 명령을 다음과 같이 실행해야 합니다.

파일 이름이 13자를 초과하는 경우(확장자 없음) 13번째 문자 이후의 모든 문자가 제거됩니다.

몇 가지 명령을 시도했습니다.밀리미터파그리고, 그러나 지금까지 나는 붙어 있습니다.

편집: 정확함을 잊어버리세요. 명령은 파일 이름의 공백을 고려하여 공백이 있으면 제거해야 합니다.

답변1

bash 쉘을 사용한다고 가정

(shopt -s globstar; rename --no-act 's/^(.{13}).*/$1\.jpg/' **/*)

따라서 (....)shopt -s globstar옵션은 어떤 이유로 와일드카드를 활성화하지 않은 경우 이 명령 하나에만 적용됩니다. zsh를 사용하는 경우

rename --no-act 's/^(.{13}).*/$1\.jpg/' **/*

--no-act스위치는 잠재적인 기능을 미리 보여줍니다 rename.
제안된 변경 사항이 만족스러우면 삭제 -no-act하면 파일 이름이 일괄 변경됩니다.

답변2

또 다른 가장 빠른 솔루션이 있을 수 있습니다. 이 코드는 공백이 포함된 파일 이름을 고려하지 않습니다. 하지만 다음 코드를 시도해 볼 수 있습니다.

SHW@SHW:/tmp # for i in `find /home/user -type f`
do
      mv $i `echo $i | cut -c -13`.`$i | rev | cut -d'.' -f 1 | rev`
done

관련 정보