파일 확장자를 유지하면서 디렉터리의 모든 파일 이름을 바꿉니다.

파일 확장자를 유지하면서 디렉터리의 모든 파일 이름을 바꿉니다.

이름을 바꿔야 하는 약 1200개의 파일이 있는 폴더가 있습니다. 대부분의 파일 확장자는 .jpg, .gif 및 .png입니다.

여기 몇 가지 예가 있어요.

    Awesome\ FB\ \ (462).jpg   
    Bonus\ FB\ Cover\ Pics\ (80).jpg
    Awesome\ FB\ \ (463).jpg   
    Bonus\ FB\ Cover\ Pics\ (81).jpg
    Awesome\ FB\ \ (464).jpg   
    Bonus\ FB\ Cover\ Pics\ (82).jpg
    Awesome\ FB\ \ (465).jpg   
    Bonus\ FB\ Cover\ Pics\ (83).jpg

나는 시도했다:

    rename 's/\.{???} $/-img4sm.{???}/' ./*.{???}

나도 이것을 시도했지만 {???} 대신 .jpg 또는 .gif를 배치하고 {}를 []로 바꿨습니다.

나는 또한 다음을 시도했습니다.

    find . -type f -iname '*.???' -exec rename 's/\.{???} $/-img4sm.{???}/' ./*.{} +

오류 메시지 없이 CloudLinux(CentOS)에서 이 명령을 성공적으로 사용했지만 파일 이름은 변경되지 않았습니다.

도와주세요. 감사합니다!

답변1

불행하게도 rename이는 유닉스 버전에 따라 의미가 다릅니다. 특히 Fedora에서는 CentOS에서는 rename여러분이 사용하는 것과 같은 Perl 표현식이 아닌 간단한 문자열만 허용할 것 같습니다(Debian에서는 작동합니다).

그러나 "-img4sm"만 추가하려는 것 같습니다. .jpg, .png 및 .gif 접미사 앞에 이름이 변경된 버전을 사용해 보세요.

rename -- .jpg -img4sm.jpg *.jpg
rename -- .png -img4sm.png *.png
rename -- .gif -img4sm.gif *.gif

이러한 명령이 예상한 대로 작동하지 않을 경우를 대비하여 항상 디렉토리를 백업으로 어딘가에 복사하십시오.


perl원하는 경우 더 복잡한 스크립트를 설치할 수 있습니다.rename cpan에서이미 알고 있다면 cpan 명령을 사용하거나 해당 페이지의 링크를 다운로드하여타르 다운로드. tar의 압축을 풀고 다음 명령을 사용하여 스크립트를 "빌드"합니다.

tar xf rename-1.9.tar.gz
cd rename-1.9
perl Makefile.PL 
make
mv bin/rename ~/bin/prename

마지막은 mvPATH의 개인 bin 디렉터리입니다. prename기존 이름 바꾸기 명령과의 혼동을 피하려면 이 이름을 사용하십시오 . 그런 다음 이를 사용하여 작업을 수행할 수 있습니다. 예를 들면 다음과 같습니다.

prename -n  's/\.(jpg|png|gif)$/-mg4sm.$1/' -- *.{jpg,gif,png}

여기서의 아이디어 -n는 실제로 일어나는 일을 하지 않고 무슨 일이 일어나는지만 보여주는 것입니다.

답변2

그리고 zsh:

autoload zmv # best in ~/.zshrc
zmv -n '(*).(png|jpg|gif)' '$1-mg4sm.$2'

-n실제로 수행된 작업을 삭제합니다 .

그렇지 않으면 POSIXly에서는 언제든지 다음을 수행할 수 있습니다.

for file in *.png *.jpg *.gif; do
  echo mv -i -- "$file" "${file%.*}-mg4sm.${file##*.}"
done

( echo실제 실행을 위해 삭제되었습니다.)

답변3

이것은 PHP 기반 솔루션입니다이 답변. myrename.php예를 들어 다음 내용으로 파일을 만듭니다 .

<?php
$test = 1;
if(!chdir('/tmp/mydir')) echo "failed chdir\n";
else if ($handle = opendir('.')) {
    while (false !== ($fileName = readdir($handle))) {
        $newName = preg_replace("/\.(jpg|gif|png)$/i","-img4sm.\\1",$fileName);
        if($newName!=$fileName){
            if($test){
                echo "$fileName -> $newName\n";
            }else{
                if(!rename($fileName, $newName))echo "failed $fileName -> $newName\n";
            }
        }
    }
    closedir($handle);
}
?>

/tmp/mydir디렉터리 경로로 바꾸세요 . 스크립트 실행

php myrename.php

일치하는 각 파일의 이전 파일 이름과 새 파일 이름을 인쇄합니다. 괜찮다면 $test = 1;으로 변경하여 $test = 0;실제로 실행해 보세요. 문제가 발생할 경우를 대비해 먼저 파일을 어딘가에 백업하는 것을 잊지 마세요.

관련 정보