[bash] 여러 파일의 확장자를 어떻게 바꾸나요?

디렉토리에는 많은 *.html파일 이 있습니다. 모두 이름을 바꾸고 싶습니다*.txt

어떻게해야합니까? bash 쉘을 사용합니다.



답변

더 나은 솔루션 (외부 호출이 아닌 bash 기능 만있는) 은 다른 답변 중 하나를 참조하십시오 .


다음은 시스템에 rename프로그램 이 있어야 할 필요가 없으며 시스템에서 가장 자주 프로그램 을 갖 더라도 필요합니다 .

for file in *.html; do
    mv "$file" "$(basename "$file" .html).txt"
done

편집 : 주석에서 지적했듯이 적절한 인용 부호가없는 파일 이름에는 공백이 없습니다 (이제 위에서 추가). 파일 이름에 공백이 없다는 것을 알고있는 파일에서 순수하게 작업 할 때 이것이 작동하지만 나중에 재사용 할 수있는 것을 쓸 때마다 적절한 인용을 건너 뛰지 마십시오.


답변

bash를 사용하는 경우 sed, basename, rename, expr 등과 같은 외부 명령이 필요하지 않습니다.

for file in *.html
do
  mv "$file" "${file%.html}.txt"
done


답변

rename 's/\.html$/\.txt/' *.html

정확히 당신이 원하는 것을합니다.


답변

이것은 OSX에서 .txt에서 .txt_bak까지 나를 위해 일했습니다.

find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;


답변

사용하고 싶습니다 rename:

rename -S .html .txt *.html

이것은 원하는 것을 정확히 수행합니다- 일치하는 모든 파일 의 확장자를에서 .html로 변경합니다 ..txt*.html

참고 : Greg Hewgill은 이것이 bash 내장이 아니라고 정확하게 지적합니다. 별도의 Linux 명령입니다. 만약 당신이 리눅스에서 무언가를 원한다면 이것은 잘 동작 할 것이다; 더 크로스 플랫폼이 필요한 경우 다른 답변 중 하나를 살펴보십시오.


답변

Mac에서 …

  1. 다음 을 수행하지 않은 경우 이름 바꾸기를 설치하십시오 .brew install rename
  2. rename -S .html .txt *.html

답변

우분투 사용자의 경우 :

rename 's/\.html$/\.txt/' *.html