DOS에서 "ren" 명령과 같은 파일 확장자를 변경하시겠습니까?

DOS에서 "ren" 명령과 같은 파일 확장자를 변경하시겠습니까?

쉘: zsh

안녕하세요, 저는 DOS에서와 같이 파일의 파일 확장자를 빠르게 변경하려고 합니다.

나는 여전히 질문에 대답하지 않는 이 질문(일종)을 찾았습니다. 확장자를 변경하려면 mv를 사용하여 여러 파일의 이름을 바꾸세요.

나는 특정 디렉토리에 있는 파일의 확장자를 변경하고 싶습니다. pwd그래서 이 작업을 수행할 때 mv동일한 디렉토리에 다시 들어가고 싶지 않습니다. 즉:

mv /Users/dir/dir1/moredir/long/foo.txt /Users/dir/dir1/moredir/long/foo.yaml

나 같은 N00bs는 단순히 /Users/dir/dir1/moredir/long/foo.txt *.yaml로 이동할 수 있다고 가정하지만, 그렇지 않습니다.

이것을 달성하는 쉬운 방법이 있습니까?

미리 감사드리며 즐거운 주말 보내세요!

답변1

단일 파일의 경우 다음을 사용할 수 있습니다.버팀대 확장파일 이름의 일부만 변경되는 파일의 이름을 바꾸는 명령줄을 구성합니다.

mv /Users/dir/dir1/moredir/long/foo.{txt,yaml}

일반적인 구문은 실행 전으로 확장됩니다.mv UNCHANGED1{OLD,NEW}UNCHANGED2mv UNCHANGED1OLDUNCHANGED2 UNCHANGED1NEWUNCHANGED2mv


여러 파일의 경우 zsh 기능zmv파일을 이동하고 이름을 바꾸는 편리한 방법을 제공합니다. 이것을 당신의 것에 넣거나 .zshrc사용하려는 모든 세션의 명령줄에서 실행하십시오 zmv.

autoload -zU zmv

그런 다음 현재 디렉터리의 파일 확장자를 변경하려면 다음 중 하나를 실행할 수 있습니다. 인수 는 호출 전이 아니라 내부적으로 해석되어야 하기 *때문에 작은따옴표로 묶어야 합니다 .$zmvzmv

zmv '*.txt' '$f:r.yaml'
zmv '(*).txt' '$1.yaml'
zmv -w '*.txt' '$1.yaml'
zmv -W '*.txt' '*.yaml'

디렉토리 경로를 반복하지 않고 다른 디렉토리의 파일 확장자를 변경하려면 다음을 수행하십시오.

zmv '/Users/dir/dir1/moredir/long/*.txt' '$f:r.yaml'
(cd /Users/dir/dir1/moredir/long && zmv '(*).txt' '$1.yaml')
(cd /Users/dir/dir1/moredir/long && zmv -w '*.txt' '$1.yaml')
(cd /Users/dir/dir1/moredir/long && zmv -W '*.txt' '*.yaml')

대체 텍스트에서:

  • $f전체 소스 경로입니다.
  • :r기록 수정자이렇게 하면 파일 이름에서 확장자가 제거됩니다.
  • $1소스 패턴에서 괄호 안의 첫 번째 그룹입니다. 괄호 안의 그룹에는 디렉터리 구분 기호를 포함할 수 없습니다(한 가지 예외는 여기에 적용되지 않음).
  • -w플래그는 자동으로 각 와일드카드 문자를 그룹에 배치합니다.
  • -W플래그를 사용하면 *대체 텍스트의 각 요소가 *소스 패턴의 해당 일치 항목을 나타내게 됩니다.

(이 작업을 수행할 수 있는 다른 도구가 여러 개 있지만 macOS를 포함한 대부분의 Unix 변형에는 기본 설치의 일부가 아닙니다. zsh를 사용하고 있으므로 훌륭한 작업을 수행하는 zmv를 활용하십시오.)

답변2

단일 파일의 이름을 디렉터리 foo.txt로 바꾸려면 먼저 디렉터리로 변경한 후 다음을 실행하면 됩니다 .foo.yaml/Users/dir/dir1/moredir/longmv

cd /Users/dir/dir1/moredir/long
mv foo.txt foo.yaml
cd -    # to move back to the original working directory

또는 중괄호 확장을 사용하여 소스 및 대상 경로 이름을 확장할 수 있습니다.

mv /Users/dir/dir1/moredir/long/foo.{txt,yaml}

위의 내용은 전체 명령으로 확장됩니다.

mv /Users/dir/dir1/moredir/long/foo.txt /Users/dir/dir1/moredir/long/foo.yaml

...쉘 호출 전 mv. 분명히 이것은 이름을 바꾼 후에도 파일이 동일한 디렉터리에 남아 있어야 하는 경우에만 작동합니다.

관련 정보