2016-07-12 4 views

答えて

2

のzshはまさにそれを意図しているユーティリティzmv、付属しています。 zmvは正規表現をサポートしていませんが、ファイル名生成パターン(別名グロビング)のキャプチャグループを提供しています。

まず、zmvを有効にする必要があります。これはあなたの~/.zshrcに以下を追加することによって行うことができます。

autoload -Uz zmv 

あなたは、このようにそれを使用することができます:

zmv 'a_(*)' 'b_$1' 

これはa_b_で置き換えられるようにa_*に一致するすべてのファイルを、名前を変更します。あなたはあまり一般的になりたい場合は、当然のことながら、パターンを調整することができます。

  • のみ.tgzファイル名前を変更する:.tar.gz

    に拡張子を変更しながらのみ.tgzファイルの名前を変更する

    zmv 'a_(*.tgz)' 'b_$1' 
    
  • zmv 'a_(*).tgz' 'b_$1.tar.gz' 
    
  • のみの名前を変更するa_1.0.tgz

    zmv 'a_(1.0.tgz)' 'b_$1' 
    

保存側上にあるように、あなたはオプション-n最初にzmvを実行することができます。これは印刷されるだけで、何が起こるかは実際には何も変えません。詳細はman zshcontribをご覧ください。

0

私はzshにあまり馴染んでいないので、正規表現をサポートしているかどうかわかりませんが、本当にここで必要とは思われません。

あなたはグロブを使用してファイルにマッチして置換使用することができます。グロブパターンでは

for file in a_[0-9].[0-9].tgz; do 
    echo "$file" "${file/a/b}" 
done 

を、[0-9]09間の任意の数と一致します。 ${file/a/b}は、aの最初のオカレンスをbに置き換えます。

結果に満足すればechomvに変更してください。あなたはこれがあなたはそれが何をしたいのかないことが確実なときechoを削除

for f in a*.tgz; do 
    echo mv "$f" "b${f:1}" 
done 

:あなたは手紙ba*.tgzに一致するすべてのファイルの最初の文字を置換したいと仮定すると、

+0

バージョン番号は、2つの数字に限定されない「1.1.1」のようなものです。 'a'の後にすべてのものをグループとして取り込み、' b'の後にこのグループを追加することは可能ですか? – JasmineOT

+0

あなたはグロブ内の任意のもの(例えば 'a _ *。tgz')と一致させることができ、' $ {file/a/b} "と同じ置換を使用して文字' a'を 'b'に変更することができます。 –

0

${f:1}は、${name:offset}パラメータ拡張を使用します。 (OS X上の)マニュアルzshexpnから:

オフセットが負でない場合、変数名は内容が文字列の最初の文字、[から文字に を開始オフセット スカラー代わるものではその後、場合.. 。]

関連する問題