을 b_1.0.tgz
으로 바 꾸었습니다. 은 버전 번호로 변경 될 수 있습니다. 어떻게 구현할 수 있습니까?Linux에서 regex 캡처 그룹을 사용하여 파일의 이름을 바꾸는 방법은 무엇입니까?
예를 들어 버전 번호를 유지할 필요가없는 경우 mv a*.tgz b.tgz
을 사용할 수 있습니다.
을 b_1.0.tgz
으로 바 꾸었습니다. 은 버전 번호로 변경 될 수 있습니다. 어떻게 구현할 수 있습니까?Linux에서 regex 캡처 그룹을 사용하여 파일의 이름을 바꾸는 방법은 무엇입니까?
예를 들어 버전 번호를 유지할 필요가없는 경우 mv a*.tgz b.tgz
을 사용할 수 있습니다.
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
을 참조하십시오.
나는 정규식을 지원하는지 모르겠으므로 zsh
에 익숙하지 않지만 실제로 여기에 필요하다고 생각하지 않습니다.
당신은 글로브를 사용하여 파일을 일치 대체 사용할 수있는 다음 글로브 패턴에서
for file in a_[0-9].[0-9].tgz; do
echo "$file" "${file/a/b}"
done
을 [0-9]
일치 0
와 9
사이의 숫자. ${file/a/b}
은 a
의 첫 번째 발생을 b
으로 대체합니다.
결과에 만족하면 echo
을 mv
으로 변경하십시오.
당신은 편지 b
와 a*.tgz
일치하는 모든 파일의 첫 번째 문자를 대체하려는 가정 : 당신이 당신이 그것을 어떻게 원하는 것을 확신 할 때
for f in a*.tgz; do
echo mv "$f" "b${f:1}"
done
가 echo
를 제거합니다.
${f:1}
은 ${name:offset}
매개 변수 확장을 사용합니다. (OS X)에 메뉴얼 zshexpn
에서 :
오프셋이 음수가 아닌 경우, 변수 이름 내용 문자열의 첫 번째 문자 [에서 문자를 오프셋 시작하는 스칼라 대용품 다음 경우 .. .]
버전 번호는 2 자리 숫자에 국한되지 않고 '1.1.1'과 같을 수 있습니다. 'a'를 그룹으로 묶고'b '뒤에이 그룹을 추가 할 수 있습니까? – JasmineOT
글자 'a'를 'b'로 변경하려면 glob (예 :'a _ *. tgz ')에서 원하는 것과 일치시킬 수 있고'$ {file/a/b} '와 같은 대체 문자를 사용할 수 있습니다. –