이름을 바꿔야 하는 약 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
마지막은 mv
PATH의 개인 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;
실제로 실행해 보세요. 문제가 발생할 경우를 대비해 먼저 파일을 어딘가에 백업하는 것을 잊지 마세요.