답변:
그러면 파일의 이름이 바뀝니다. 원하는 수의 영숫자를 나타내려면 \ 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
${x/]*([^.])}
해야 할 일은 괄호와 여러 개의 점이 아닌 점을 제거하는 것입니다. (문자열의 끝에 고정되어 있지 않으므로 다른 대괄호 나 점이 있으면 실패합니다)
${x/]*.avi}
방금 .avi
너 같이. 그러나 나는 또한 이름 공간이 어떻게 깨지는 지에 만족하지 못했다. (`find . -name '*]*.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을 사용하면 훨씬 더 짧은 방법 일 것입니다.하지만 정규식을 모르는 사람들이 이해할 수있는 것을 보여주고 싶습니다.)
이렇게하면 패턴을 검색하고 sed를 사용하여 텍스트를 바꿉니다.
$sed 's/\(.*]\)[a-zA-z0-9].*\(.avi\)/\1\2/' filename
krename
사랑 스럽다. 그것은 모든 종류의 강력한 옵션을 가지고 있으며 실제로 그것을하기 전에 할 일을 보여줍니다. 나중에 bash에서 사용할 수있는 패턴을 테스트하는 데 사용할 수도 있습니다.