zmvコマンドは、パターンを一致させた後にファイルの名前を変更します。

zmvコマンドは、パターンを一致させた後にファイルの名前を変更します。

解決策を見つけようとしています。これを使用して問題が発生しましたzmv。を使用して正確な解決策を見つけることができませんzmv。これが私が今まで考えることができるものです。

~からここ、次のコマンドを使用して、などのすべてのファイル名を1.jpgに変更できます。2.jpg34.jpg001.jpg002.jpg034.jpg

zmv '(<1->).jpg' '${(l:3::0:)1}.jpg'

zmvこれで、ファイル名を変更できるように、最初にいくつかのパターンがあるように変更する必要があります。しかし、私はこれを行うことはできません。私が見つけることができる最も近いのはこれです解決策

c=1 base='0-' zmv '*.jpg' '${base}${(l:3::0:)$((c++))}.jpg'

しかし、上記の方法の問題は、私のファイルがある場合、上記の0-1.jpgコマンド0-44.jpgがそのファイルを0-001.jpgandの0-002.jpg代わりに0-001.jpgandに置き換えるということです0-044.jpg

zmv希望の名前変更を実行するには、コマンドをどのように変更する必要がありますか?

答え1

あなたはそれを使用することができます-l 拡張フラグ:

l:expr::string1::string2:

生成された単語を左に埋めます。必要に応じて、各単語が切り捨てられ、expr文字全体のフィールドに配置されます。

:string1: および :string2: パラメーターはオプションです。どちらも提供できない、最初のパラメータを提供する、または両方を提供できます。 3つのパラメータのそれぞれは、同じ区切り記号のペアを使用する必要があります。左側のスペースは、string1(必要に応じて頻繁にリンクされている)またはスペース(string1が指定されていない場合)で埋められます。 string1 と string2 の両方が提供されている場合は、string1 を使用して必要に応じて切り捨てられた残りのパディングを作成する前に、string2 を各単語の左側に直接一度挿入します。

MULTIBYTEオプションが適用されている場合は、mフラグも指定できます。この場合、幅はパディングを計算するために使用されます。それ以外の場合、単一のマルチバイト文字が1つの幅単位を占めると見なされます。

MULTIBYTE オプションが無効な場合、文字列の各バイトは 1 つの幅単位を占めると見なされます。

制御文字は常に1つの単位と見なされます。これにより、メカニズムを使用して制御文字の反復を生成できます。

努力する:

zmv '([0-9])-([0-9]##).(jpg)' '$1-${(l:3::0:)2}.$3'

答え2

0で埋められますが、3文字より長い${(l:3::0:)var}文字は切り捨てられます(に変更されます)。var1234234

typeset -Z3別のオプションはà laを使用することですksh

typeset -Z3 z3
zmv '([0-9]-)(<->)(.jpg)' '$1${${z3::=$2}+}$z3$3'

${${z3::=$2}+}上記の方法を使用してペア割り当てをトリガーしますz3。以下は0 paddingに$z3展開されます。z3

関連情報