ファイル拡張子を保持しながら、ディレクトリ内のすべてのファイルの名前を変更します。

ファイル拡張子を保持しながら、ディレクトリ内のすべてのファイルの名前を変更します。

名前を変更する必要がある約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これはUnixのバージョンによって意味が異なります。特に、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;実際に実行してみてください。問題が発生した場合に備えて、まずファイルをどこかにバックアップすることを忘れないでください。

関連情報