쉘: 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}UNCHANGED2
mv UNCHANGED1OLDUNCHANGED2 UNCHANGED1NEWUNCHANGED2
mv
여러 파일의 경우 zsh 기능zmv
파일을 이동하고 이름을 바꾸는 편리한 방법을 제공합니다. 이것을 당신의 것에 넣거나 .zshrc
사용하려는 모든 세션의 명령줄에서 실행하십시오 zmv
.
autoload -zU zmv
그런 다음 현재 디렉터리의 파일 확장자를 변경하려면 다음 중 하나를 실행할 수 있습니다. 인수 는 호출 전이 아니라 내부적으로 해석되어야 하기 *
때문에 작은따옴표로 묶어야 합니다 .$
zmv
zmv
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/long
mv
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
. 분명히 이것은 이름을 바꾼 후에도 파일이 동일한 디렉터리에 남아 있어야 하는 경우에만 작동합니다.