파일 이름의 마지막 8자의 이름을 바꿉니다.

파일 이름의 마지막 8자의 이름을 바꿉니다.

다른 이름의 비디오 파일을 수신하고 있는데 마지막 8자는 모두 숫자입니다(역시 매번 다릅니다). 파일 이름의 패턴은 다음과 같습니다.

custom text 00030402.avi

파일 이름을 다음과 같이 만들어야 합니다.

00\:03\:04\:02

그래서 제 질문은 마지막 8자의 이름을 바꾸고 이 패턴을 달성하기 위해 이를 보존하는 방법입니다.

답변1

사용 rename(from이 아닌 from 이라고도 perl함 ):prenameutil-linux

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/'  *.avi

이렇게 하면 파일 이름 custom text 00030402.avicustom text 00:03:04:02.avi.

파일 이름(앞 :)에 백슬래시를 사용하는 경우 다음과 같이 말합니다.

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1\\:$2\\:$3\\:$4/' *.avi

파일 이름에서 사용자 정의 텍스트를 제거하려면 다음과 같이 말하십시오.

rename 's/.* (\d{2})(\d{2})(\d{2})(\d{2})(.*)/$1\\:$2\\:$3\\:$4$5/' *.avi

답변2

와 함께 zsh:

$ autoload zmv
$ zmv -v '(*)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi custom\ text\ 00\\:03\\:04\\:02.avi

(자세한 내용은 -v). 제거하려면맞춤 텍스트:

$ zmv -v '*(??)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi 00\\:03\\:04\\:02.avi

답변3

Perl 정규식 예측을 사용하여 이를 수행하는 방법은 다음과 같습니다.

perl -e '
    while($name=shift){
        @components = split /(?=(?:[0-9]{2})+[^0-9]+$)/,$name;
        shift @components;
        $new_name = join '\:',@components;
        rename $name => $new_name;
    }
' list_of_avi_files

이는 4자리뿐만 아니라 모든 숫자 쌍에 대해 작동합니다. 예를 들어 {2}로 변경하여 {3}세 자리 숫자로 분할할 수도 있습니다.

관련 정보