나는 아래와 같은 미디어 파일들을 가지고있다.
tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
나는 그들에게 이름을 바꾸고 싶다.
tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
나는 이름 바꾸기를 사용하여 시도했지만 분명히 실패했기 때문에 문법을 제대로 이해하지 못하고있다.
답변
그러면 파일의 이름이 바뀝니다. 원하는 수의 영숫자를 나타내려면 \ w *가 필요합니다.
rename 's/\]\w*//' *
참고: http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
답변
셸에서는 간단히 할 수 있습니다.
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
쉘은 정규 glob로 파일 이름 목록을 생성 할 수 있습니다. ${var%pattern}
변수의 문자열 끝에있는 (가장 짧은) 일치하는 패턴을 제거합니다. var
. 최종 확장은 항상 이후 .avi
, 방금 패턴으로 제거하고 다시 추가했습니다. 따옴표를 사용하면 파일 이름에도 공백이 포함될 수 있습니다. Fancy Name for a Show.s01e01]Asdf.avi
답변
이것은 모든 종류의 비실용적입니다 – 다른 답변은 훨씬 더 빠르며 더 짧습니다 -하지만 …
PowerShell을 사용할 수 있습니다! 마이크로 소프트 그것을 오픈 소스했다. 최근에 그것을 크로스 플랫폼으로 만들었습니다. OS의 다운로드 및 설치 지침은 다음을 참조하십시오. “PowerShell 가져 오기”절 .
일단 설치하면 다음과 같은 간단한 스크립트를 사용할 수 있습니다.
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
기본적으로, 그것은 일치하는 파일 인 현재 디렉토리의 각 객체를 거칩니다. *]*.avi
브래킷 앞 부분을 잡아 당김 .avi
다시 그 위에 새 이름으로 할당합니다.
Bash에서 직접 실행하려면 다음과 같이 반 골프 한 줄을 사용하십시오.
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
견적 이스케이프 호의 이 스택 오버플로 대답 .
(Windows의 Ubuntu에서 Bash로 테스트했는데, PowerShell을 사용하면 훨씬 더 짧은 방법 일 것입니다.하지만 정규식을 모르는 사람들이 이해할 수있는 것을 보여주고 싶습니다.)