解決策を見つけようとしています。これを使用して問題が発生しましたzmv
。を使用して正確な解決策を見つけることができませんzmv
。これが私が今まで考えることができるものです。
~からここ、次のコマンドを使用して、などのすべてのファイル名を1.jpg
に変更できます。2.jpg
34.jpg
001.jpg
002.jpg
034.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.jpg
andの0-002.jpg
代わりに0-001.jpg
andに置き換えるということです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}
文字は切り捨てられます(に変更されます)。var
1234
234
typeset -Z3
別のオプションはà laを使用することですksh
。
typeset -Z3 z3
zmv '([0-9]-)(<->)(.jpg)' '$1${${z3::=$2}+}$z3$3'
${${z3::=$2}+}
上記の方法を使用してペア割り当てをトリガーしますz3
。以下は0 paddingに$z3
展開されます。z3