2016-07-12 3 views

답변

2

zsh을는 정확히위한 것입니다 유틸리티 zmv, 함께 제공됩니다. zmv은 정규 표현식을 지원하지 않지만 파일 생성 패턴 (예 : globbing)에 대한 캡처 그룹을 제공합니다.

먼저 zmv을 사용해야 할 수 있습니다. 이것은 당신의 ~/.zshrc에 다음을 추가하여 수행 할 수 있습니다

autoload -Uz zmv 

당신은 다음과 같이 사용할 수 있습니다 :

zmv 'a_(*)' 'b_$1' 

이 너무 a_* 일치하는 모든 파일의 이름을 변경합니다, a_b_로 대체된다.

  • .tgz 파일의 이름을 변경하기 : .tar.gz

    로 확장자를 변경하는 동안

    zmv 'a_(*.tgz)' 'b_$1' 
    
  • .tgz 파일의 이름을 변경하는 적은 일반 싶은 경우에, 당신은 물론 패턴을 조정할 수 있습니다

    zmv 'a_(*).tgz' 'b_$1.tar.gz' 
    
  • 전용 이름 바꾸기 a_1.0.tgz :

    zmv 'a_(1.0.tgz)' 'b_$1' 
    

6,당신이 옵션 -n 처음으로 zmv를 실행할 수 있습니다, 저장 옆에있을합니다. 이 경우에만 인쇄되지만 실제로는 변경되지 않습니다. 자세한 내용은 man zshcontrib을 참조하십시오.

0

나는 정규식을 지원하는지 모르겠으므로 zsh에 익숙하지 않지만 실제로 여기에 필요하다고 생각하지 않습니다.

당신은 글로브를 사용하여 파일을 일치 대체 사용할 수있는 다음 글로브 패턴에서

for file in a_[0-9].[0-9].tgz; do 
    echo "$file" "${file/a/b}" 
done 

[0-9] 일치 09 사이의 숫자. ${file/a/b}a의 첫 번째 발생을 b으로 대체합니다.

결과에 만족하면 echomv으로 변경하십시오.

+0

버전 번호는 2 자리 숫자에 국한되지 않고 '1.1.1'과 같을 수 있습니다. 'a'를 그룹으로 묶고'b '뒤에이 그룹을 추가 할 수 있습니까? – JasmineOT

+0

글자 'a'를 'b'로 변경하려면 glob (예 :'a _ *. tgz ')에서 원하는 것과 일치시킬 수 있고'$ {file/a/b} '와 같은 대체 문자를 사용할 수 있습니다. –

0

당신은 편지 ba*.tgz 일치하는 모든 파일의 첫 번째 문자를 대체하려는 가정 : 당신이 당신이 그것을 어떻게 원하는 것을 확신 할 때

for f in a*.tgz; do 
    echo mv "$f" "b${f:1}" 
done 

echo를 제거합니다.

${f:1}${name:offset} 매개 변수 확장을 사용합니다. (OS X)에 메뉴얼 zshexpn에서 :

오프셋이 음수가 아닌 경우, 변수 이름 내용 문자열의 첫 번째 문자 [에서 문자를 오프셋 시작하는 스칼라 대용품 다음 경우 .. .]

관련 문제