zsh에서 모든 확장 제거 가정합니다. 가장 간단한 방법은

확장자가 .bak 인 파일이 많은 디렉토리가 있고이를 각각에서 제거하려고한다고 가정합니다. 가장 간단한 방법은 무엇입니까? 내가 바라는 것을하는 명령을 의미한다 mv *.bak *.



답변

zmv

Zsh에는 zmv파일 이름 바꾸기 (또는 복사)에 대한 매우 간단한 인터페이스를 제공하는가 있습니다.

autoload zmv
zmv '(*).bak' '$1'

모든 괄호 쌍은 그룹을 캡처 한 다음 $1, $2등 으로 액세스 할 수 있습니다 . 다음은 몇 가지 더 예 .

이를 수행하는 또 다른 방법 은 간단한 이름 바꾸기 작업에 적합한 옵션 zmv을 사용하는 -W것입니다.

zmv -W '*.bak' '*'

zmv항상 사용할 수 있는 가장 쉬운 방법 은에 설명을 입력하는 autoload zmv~/.zshrc입니다.


배쉬 구문으로

문자열 조작과 함께 “일반”Bash 구문을 사용하려면 다음을 수행하십시오.

for f in *.bak; do mv -- "$f" "${f%.bak}"; done

rename도구

rename일부 Linux 및 OS X ~에서 사용할 수 있는 도구가 있습니다 brew install rename.

rename 's/.bak$//' *

$포함 할 일이 파일 이름의 중간 부분을 문자열의 끝을 캡처, 그리고 필요가있다 .bak.


답변

주어진 훌륭한 답변 외에도 bash 또는 zsh와 같은 최신 쉘이없는 POSIX 호환 시스템에서 작동 하는 매우 오래된 방법이 있습니다.

for f in *.bak; do mv $f `echo $f | sed -e 's/\.bak$//'`; done