다른 이름으로 동영상 파일을 받았는데 마지막 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
.
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}
하고 분할 할 수도 있습니다 .