3つの代替案を提案します。それぞれは単純な単一行コマンドですが、主に処理するファイルが同じディレクトリ内の他のファイルと混在している場合に備えて、より複雑な場合のバリアントを提供します。
mmv
同じ名前のパッケージ
からmmvコマンドを使用します。
mmv '*HBO_DPM*' '#1dpm#2'
引数は文字列として渡されるため、シェルではグロブ展開が行われないことに注意してください。このコマンドは正確に2つの引数を受け取り、対応するファイルを内部的に検索します。ファイル数に厳しい制限はありません。また、上記のコマンドは、最初のグロブに一致するすべてのファイルの名前が変更されることを前提としていることに注意してください。もちろん、もっと具体的にすることは自由です:
mmv 'sb_606_HBO_DPM_*' 'sb_606_dpm_#1'
同じディレクトリに要求された番号範囲外のファイルがある場合、この回答でさらに下に指定された番号のループを使用する方がよい場合があります。ただし、適切なパターンでmmv呼び出しのシーケンスを使用することもできます。
mmv 'sb_606_HBO_DPM_0089*' 'sb_606_dpm_0089#1' # 0089000-0089999
mmv 'sb_606_HBO_DPM_009*' 'sb_606_dpm_009#1' # 0090000-0099999
mmv 'sb_606_HBO_DPM_01[0-5]*' 'sb_606_dpm_01#1#2' # 0100000-0159999
mmv 'sb_606_HBO_DPM_016[0-2]*' 'sb_606_dpm_016#1#2' # 0160000-0162999
mmv 'sb_606_HBO_DPM_01630[01]?' 'sb_606_dpm_01630#1#2' # 0163000-0163019
mmv 'sb_606_HBO_DPM_016302[0-2]' 'sb_606_dpm_016302#1' # 0163020-0163022
数字をループする
何もインストールしないようにする場合、またはこの範囲外の一致を避けるために番号範囲で選択する必要があり、74,023個のコマンド呼び出しを待機する準備ができている場合は、単純なbashループを使用できます。
for i in {0089000..0163022}; do mv sb_606_HBO_DPM_$i sb_606_dpm_$i; done
シーケンスにギャップがないため、これはここで特にうまく機能します。それ以外の場合は、ソースファイルが実際に存在するかどうかを確認する必要があります。
for i in {0089000..0163022}; do
test -e sb_606_HBO_DPM_$i && mv sb_606_HBO_DPM_$i sb_606_dpm_$i
done
for ((i=89000; i<=163022; ++i))
数年前に一部のBashがリリースされて以来、ブレース拡張とは対照的に、先行ゼロを処理することに注意してください。実際に私が要求した変更であるため、使用例が表示されてうれしいです。
さらに読む: Bash情報ページのブレース拡張、特にについての部分{x..y[..incr]}
。
ファイルのループ
別のオプションは、問題の整数範囲を単にループするのではなく、適切なグロブをループすることです。このようなもの:
for i in *HBO_DPM*; do mv "$i" "${i/HBO_DPM/dpm}"; done
繰り返しますが、これはmv
ファイルごとに1回の呼び出しです。繰り返しますが、ループは要素の長いリストに対して行われますが、リスト全体がサブプロセスへの引数として渡されるのではなく、bashによって内部的に処理されるため、制限は問題を引き起こしません。
その他の 資料: Bash情報ページのシェルパラメーター拡張、${parameter/pattern/string}
他の文書化。
番号範囲を指定したものに制限する場合は、そのためのチェックを追加できます。
for i in sb_606_HBO_DPM_+([0-9]); do
if [[ "${i##*_*(0)}" -ge 89000 ]] && [[ "${i##*_*(0)}" -le 163022 ]]; then
mv "$i" "${i/HBO_DPM/dpm}"
fi
done
ここで${i##pattern}
は、pattern
から最長のプレフィックス一致を削除し$i
ます。その最も長いプレフィックスは、すべて、アンダースコア、ゼロまたはそれ以上のゼロとして定義されます。後者は、設定されているオプションに依存*(0)
する拡張グロブパターンであると記述されていextglob
ます。先頭のゼロを削除することは、数値を8 +([0-9])
進数ではなく10進数として扱うために重要です。ループ内の引数は別の拡張グロブであり、1つ以上の数字に一致します。数。
ARG_MAX
制限と衝突する多数のファイルのために、他の質問に対するCLI回答のほとんどはここでは機能しません。この質問ではコマンドラインソリューションを明示的に要求しているため、他の質問と同様の(おそらく同等の)GUIソリューションも一致しません。