2017-12-14 6 views
0

"-x-large.jpg"で終わるjpgファイルのあるフォルダがあります。コマンドラインを使ってすべての名前を変更して-x-large .jpgになります。コマンドライン一括リネームJpgファイル

したがって、たとえば123-X-large.jpgが123.jpg

になります誰かが私はRENコマンドでこれを行うことができる方法を教えてもらえますか?

ありがとうございました。

+0

あなたはどんなコマンドラインを求めていますか? 1つのCMD(Windows)回答と1つのPosix/GNU(Macおよび/またはLinux)回答があります。 –

答えて

0
for img in *-x-large.jpg; do mv -i -v "$img" "${img%-x-large.jpg}.jpg"; done 

これは.jpgは、ファイル名の末尾に戻って追加して、一致するすべての画像についてループし、(端部から-x-large.jpgを除去)切り詰められた名前で新しいファイルにそれらを移動させます。私はmv -iと対話的に呼び出すので、各ファイルを上書きする前にプロンプ​​トが表示されます。上書きを強制するには(常に「はい」と言う)、mvに変更します(-iを削除してください)。上書きを防止するには(常に「いいえ」と言う)、それをmv -nに変更します。

各名前の変更を確認したくない場合は、-v(冗長)を削除してください。

 

あなたはこれらのファイルの非常に大きな数を持っている場合は、コマンドラインが(*-x-large.jpgは、コマンドライン上に展開されますので)上記のコマンドのためにあまりにも長くなります。次のようにあなたがfindxargsでそれを回避することができます。

sh <(find . -maxdepth 1 -name '*-x-large.jpg' \ 
    |sed -r 's/(.*)(-x-large.jpg)$/mv -i "\1\2" "\1.jpg"/') 

をこれが作成するために、私たちが名前を変更したいすべてのファイルのリストを生成するfindを使用して、sedを介してそれらをパイプ、bashのprocess substitutionを使用してシェルスクリプトを作成しますmvコマンド。
(上記のmvフラグを参照してください。-vを削除しました。おそらくこれは非常に長いリストになるためです)
スクリプトを実行する前にチェックしたい場合は、以下のバージョンを参照してください。

上記の1つのライナーには、GNU bashまたはKornシェル(ksh)とGNU sedが必要です。ここ
はどちらも(3つのコマンドで)でそれを行う方法は次のとおりです。

find . -maxdepth 1 -name '*-x-large.jpg' \ 
    |sed 's/.*/mv "&" "&/; s/-x-large.jpg$/.jpg"/' > temp.sh 
sh temp.sh 
rm temp.sh 

Posix sedは確実にキャプチャグループをサポートしていません(\(…\)またはsed -rEREを呼び出すために)、したがって、我々はそれができることを期待することはできませんこのバージョンではほとんどのコマンドが書き込まれ、最後の部分が修正されます(最初の置換の後ろに二重引用符がないことは意図的です; 2番目の置換に追加します)。 Posix shell/bin/sh proper)はプロセス置換をサポートしていないため、一時ファイルにダンプして評価してから削除します。

0

Windowsのコマンドラインを参照している場合、SET /?はあなたの友人です。そこに良い情報の読み込み。

setlocal ENABLEDELAYEDEXPANSION 
set SEARCH_SUFFIX=-x-large.jpg 
set REPLACE_SUFFIX=.jpg 
for %%A in ("*%SEARCH_SUFFIX%") do (
    set OLD_NAME=%%~nxA 
    set NEW_NAME=!OLD_NAME:%SEARCH_SUFFIX%=%REPLACE_SUFFIX%! 
    ren "!OLD_NAME!" "!NEW_NAME!" 
) 
endlocal 
関連する問題