답변:
또는 순수한 bash를 사용할 수 있습니다 ... (mv 제외, 즉 ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
불쾌한 기본 이름을 피하십시오. ;)
Bash에는 광범위한 변수 확장 옵션이 있습니다. 여기에 사용 된 '%'는 변수 값에서 일치하는 가장 작은 접미사를 제거합니다. 패턴은 glob 패턴이므로 ${file%.*}
작동합니다. '%%'연산자는 가장 큰 일치하는 접미사를 제거하고 위의 예에서 패턴이 수정되면 ${file%%.*}.html
abhtm을 a.html로 바꿉니다.
더 깔끔한 트릭은 bash 맨 페이지의 변수 서브 섹션 섹션을 참조하십시오. bash 내에서 직접 수행 할 수있는 것이 많이 있습니다.
rename(1)
정확히 원하는 것을 수행하는 Perl 유틸리티입니다. 이 경우 :
rename 's/\.htm$/.html/' *htm
또는 하위 디렉토리를 사용하는 경우
(Bash 4.0 및 globstar 설정이 필요합니다. shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
펄과 함께 제공되며 기본적으로 모든 유닉스는 펄과 함께 제공됩니다.
shopt -s globstar
(기본적으로 해제되어 있음) 또한 Linux 및 Unix에는 폴더가 아닌 디렉토리가 있습니다.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
처음으로 echo
앞에서 시도하십시오 mv
.
원본의 문제는 " mv *.htm *.html
"이 (가) *
셸에서 처리 한 mv
것이므로이 명령은 현재 디렉토리의 모든 .htm 및 .html 파일 목록을 볼뿐입니다. 즉, " mv foo.htm bar.htm stuff.htm six.htm file.htm
" 와 같은 것 입니다. mv는 마지막 인수가 디렉토리 인 경우 두 개 이상의 인수를 처리하는 방법 만 알고 있습니다.
mv
작동하지 않는 이유가 명확 해집니다 .
#
.
Fedora 의 util-linux-ng 패키지에는 TRS-80에서rename
언급 한 것과 비슷한 명령이 있습니다. 다음과 같이 사용할 수 있습니다.
rename .htm .html *.html
ren *.htm *.html
Windows에서 작동합니다.