拡張子でファイルを検索し、検索パターンの前後の文字を置き換える

拡張子でファイルを検索し、検索パターンの前後の文字を置き換える

拡張子でファイルを検索し、検索パターンの前の任意の文字を指定されたテキスト(代替)に置き換え、このパターンの後の数字を増分カウンタに変換して別のフォルダに移動する必要があります。例は次のとおりです。

拡張子.EXTでファイルを検索する

/opt/files/QvmBIsB3_PATTERN_77580.EXT
/opt/files/8iV8QhFwQos_PATTERN_77580.EXT
/opt/files/lgI6JUEh55za488_PATTERN_77580.EXT

これを変更して別のフォルダに置き換えます。

/opt/replaced/REPLACED_PATTERN_1.EXT
/opt/replaced/REPLACED_PATTERN_2.EXT
/opt/replaced/REPLACED_PATTERN_3.EXT

答え1

zshを使用していただきありがとうございます。ズマブ:

autoload -zU zmv
n=1
zmv -n '/opt/files/*_(PATTERN)_*(.EXT)' '/opt/replaced/REPLACED_PATTERN_$((n++))$2'

説明する:

  • 最初のパラメータzmvは、名前を変更するファイルを識別するシェルパターンです。
  • 2番目のパラメータは代替テキストです。
  • パターン内の括弧内のグループと一致する部分を使用するには、代替テキストになど$1を使用できます。$2
  • $((n++))$n現在の値を使用して増加します。
  • 満足している場合は、削除して-n実際に作業を実行してください。

または、次のものを使用できます。パールベースprename( renameDebian パッケージ). zmvと比べると、Debianにデフォルトでインストールされるという利点がありますが、これを含む多くの作業についてはより秘密であるという欠点があります。

prename -n 'BEGIN {our $n = 1} our $n; s!.*_(PATTERN)_[0-9]+(\..*)$!/opt/replaced/REPLACED_PATTERN_$n$2! and ++$n' /opt/files/*_PATTERN_*.EXT

説明する:

  • 最初のパラメータprenameは、各ファイル名に対して実行されるPerl式です。暗黙的な変数の以前の値$_は現在のファイル名であり、式が評価された後にファイル名が新しい値に変更されます。
  • このBEGIN {…}ブロックは、$nファイル名に対してループを実行する前に初期化されます。 BEGINブロックとキー式で使用できるようにグローバル変数としてour $n宣言します。$n
  • s!…!…!正規表現の置換を実行します。
  • 正規表現はファイル全体の目的のパターンと一致します(なぜなら.*次から始めて終わるから$です。単純化のために、ファイル名に改行文字が含まれていないと仮定します)。一致がPATTERN保存されるたびに、$1拡張子は$2(括弧で囲まれた2つのグループ)に保存されます。
  • 置換は別のディレクトリに新しいファイル名を生成します。
  • and ++$nパターンが一致するとカウンタをインクリメントします。
  • 満足している場合は、削除して-n実際に作業を実行してください。

関連情報