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

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

다른 이름으로 동영상 파일을 받았는데 마지막 8자는 숫자입니다(역시 매번 다름). 파일 이름의 패턴은 다음과 같습니다.

custom text 00030402.avi

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

00\:03\:04\:02

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

답변1

사용(때때로 renamefrom이 아닌 from이라고 함):perlprenameutil-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.

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

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}하고 분할 할 수도 있습니다 .

관련 정보