다른 이름의 비디오 파일을 수신하고 있는데 마지막 8자는 모두 숫자입니다(역시 매번 다릅니다). 파일 이름의 패턴은 다음과 같습니다.
custom text 00030402.avi
파일 이름을 다음과 같이 만들어야 합니다.
00\:03\:04\:02
그래서 제 질문은 마지막 8자의 이름을 바꾸고 이 패턴을 달성하기 위해 이를 보존하는 방법입니다.
답변1
사용 rename
(from이 아닌 from 이라고도 perl
함 ):prename
util-linux
rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/' *.avi
이렇게 하면 파일 이름 custom text 00030402.avi
이 custom 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}
세 자리 숫자로 분할할 수도 있습니다.