디렉토리의 모든 파일에서 특정 확장자를 제거하십시오. [중복]

디렉토리의 모든 파일에서 특정 확장자를 제거하십시오. [중복]

확장자가 ".old"인 파일이 여러 개 있습니다.
파일을 삭제하지 않고 ".old" 확장자를 제거하려면 어떻게 해야 합니까?

수동으로 수행할 수도 있지만 더 많은 작업이 필요합니다.

mv file1.key.old file1.key
mv file2.pub.old file2.pub
mv file3.jpg.old file3.jpg
mv file4.jpg.old file4.jpg

(etc...)

이 명령을 다른 확장 프로그램에도 사용할 수 있나요?

예:

mv file1.MOV.mov file1.MOV
mv file2.MOV.mov file2.MOV
mv file3.MOV.mov file3.MOV

(etc...)

또는 더 나은:

mv file1.MOV.mov file1.mov
mv file2.MOV.mov file2.mov
mv file3.MOV.mov file3.mov

(etc...)

답변1

사용bash 매개변수 대체 메커니즘일치하는 접미사 패턴을 제거합니다.

for file in *.old; do
    mv -- "$file" "${file%%.old}"
done

답변2

사용 중인 운영 체제를 지정하지 않았지만 많은 Linux 배포판에는 rename이 목적으로 사용할 수 있는 명령이 있습니다. 실제로 완전히 다른 두 가지 명령이 있습니다 rename. Debian 및 유사한 시스템은 하나의 명령을 제공하고 RedHat 및 유사한 시스템은 또 다른 명령을 제공하지만 여기서는 둘 중 하나가 작동합니다.

renameDebian, Ubuntu 등을 기반으로 하는 Perl은 다음을 참조하세요.이름 책.

renameRedhat 등 의 Util-Linux는 다음을 참조하세요.매뉴얼 이름 바꾸기.

Debian 및 유사한 시스템에서는 다음을 수행할 수 있습니다.

rename 's/\.old$//' *

또는:

rename s/.MOV.mov/.mov/ *.*

Redhat 및 유사한 플랫폼에서는 다음을 수행할 수 있습니다.

rename .old "" *

답변3

다음과 같은 다양한 이름 바꾸기 도구가 있습니다.http://file-folder-ren.sourceforge.net/

하지만 이름을 바꾸는 가장 빠른 방법은 다음과 같은 간단한 스크립트라고 생각합니다.

for i in *.old
do
   mv -- "$i" "${i%.old}"
done

오류 검사는 없으며 대상 파일이 있는 경우 덮어쓸 수 있습니다.

답변4

이름 바꾸기 도구를 사용하는 대신 쉘(Bash) 프로그래밍으로 답변을 제한하려면 다음을 시도하십시오.

for oldname in *.old ; do
    newname="${oldname%%.old}"
    if [ -e "$newname" ] ; then
        echo "Cannot rename $oldname because $newname exists." >&2
    else
        mv -- "$oldname" "$newname"
    fi
done

$oldname$newname파일 이름에 공백이 포함될 수 있기 때문에 따옴표를 사용합니다 .

관련 정보