다른 확장자를 가진 파일 이름을 바꾸는 방법

다른 확장자를 가진 파일 이름을 바꾸는 방법

다음 파일이 있다고 가정해 보겠습니다.

essay.aux                   essay.out
essay.dvi                   essay.pdf
essay.fdb_latexmk           essay.tex
essay.fls                   essay.toc
essay.log                   ......

이름을 다음과 같이 바꾸려면 어떻게 해야 합니까?

new_name.aux                new_name.out
new_name.dvi                new_name.pdf
new_name.fdb_latexmk        new_name.tex
new_name.fls                new_name.toc
new_name.log                ......

문제는 이름이 다른 대신 확장자가 다르기 때문에 사용할 수 없다는 것입니다.이 문제. 그리고 저는 rename명령어 가 없는 macOS를 사용하고 있습니다 .

답변1

이것이 제가 사용할 수 있었던 솔루션입니다:

#!/bin/bash
shopt -s nullglob

my_files='/root/temp/files'
old_name='essay'
new_name='new_name'

for file in "${my_files}/${old_name}"*; do
    my_extension="${file##*.}"
    mv "$file" "${my_files}/${new_name}.${my_extension}"
done
  • shopt -s nullglob

이렇게 하면 구문 분석된 디렉터리가 비어 있는 경우 오류가 발생하지 않습니다.

  • for file in "${my_files}/${old_name}"*; do

다음으로 끝나는 한 각 filein을 반복합니다./root/temp/files/essay

  • my_extension="${file##*.}"

이것은 무엇이든 탐욕스럽게 잘라낼 것입니다마지막 .파일 이름에서 발견됨(확장자만 남겨두기를 바랍니다)

  • mv "$file" "${my_files}/${new_name}.${my_extension}"

확장자를 유지하면서 이전 파일을 새 파일 이름으로 이동합니다. (이름이 변경됨)

답변2

다음을 사용하여 찾을 수도 있습니다.

 find . -name "essay.*" -exec sh -c 'mv $1 new_name.${1##*.}' rename {} \;

답변3

zsh를 사용하면 다음을 수행할 수 있습니다.

autoload zmv
zmv -w 'essay.*' 'new_name.$1'

공손히이 답변.

답변4

다음 명령을 사용하여 출력을 얻습니다.

먼저 for모든 파일 확장자를 언급하는 for 루프를 사용한 다음 루프 내에서 awk요구 사항에 따라 파일 이름을 바꾸는 명령을 사용했습니다.

테스트를 거쳐 잘 작동함

주문하다

for i in aux out dvi pdf fdb_latexmk tex fls toc; do  find . -type f -iname "*.$i"| awk -F "./" '{print $2}' | awk -F "." '{print "mv" " " $1"."$2 " " "new_name."$2}'| sh; done

관련 정보