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