ディレクトリ内のすべてのファイルのファイル名のカウンタを置き換えます。

ディレクトリ内のすべてのファイルのファイル名のカウンタを置き換えます。

カメラからハードドライブに1000個のファイルをインポートした後、ファイル名を変更する際に使用されるカウンタが0から始まらないことに気づきました。その結果、ファイル構造は次のようになります。

My vacation 2018-05-03 2345.jpg
My vacation 2018-05-03 2346.jpg
My vacation 2018-05-04 2347.jpg

インデックスがゼロで始まるワックスのすべてのファイル名をまとめて変更したいと思います。

My vacation 2018-05-03 0001.jpg
My vacation 2018-05-03 0002.jpg
My vacation 2018-05-04 0003.jpg

バッチの名前変更ファイル名を扱ういくつかのトピックを見ました。次へ追加カウンタ/インデックス(bashループ)または使用名前の変更/名前の変更しかし、私の場合、効果的な解決策が見つかりません。

.*(\d\d\d\d\-\d\d\-\d\d){1}デフォルトでは、正規表現を使用してファイル名の一部を説明と日付と一致させ、最後にサフィックスカウンタを追加したいと思います。

ベストアンサー1

そしてzsh

$ autoload -Uz zmv
$ zmv -n '(* )(<->)(.jpg)' '$1${(l[4][0])$(($2 - 2344))}$3'
mv -- 'My vacation 2018-05-03 2345.jpg' 'My vacation 2018-05-03 0001.jpg'
mv -- 'My vacation 2018-05-03 2346.jpg' 'My vacation 2018-05-03 0002.jpg'
mv -- 'My vacation 2018-05-04 2347.jpg' 'My vacation 2018-05-04 0003.jpg'

(その後、満足すれば削除-n(模擬実行))。

より具体的には、ファイル名に日付(XXXX-XX-XX)を含める必要があります。

zmv -n '(* [0-9](#c4)(-[0-9](#c2))(#c2) )(<->)(.jpg)' '$1${(l[4][0])$(($3 - 2344))}$4'

または

zmv -n '(* <1970-2021>-<1-12>-<1-31> )(<->)(.jpg)' '$1${(l[4][0])$(($2 - 2344))}$3'

2344から数字を減算します。あるいは、すでに存在する数値の値を無視して順番に並べ替え、1から番号付けを開始することもできます。日付より前にプレフィックスが変更されるたびに番号を再開するには、次のようにします。

$ typeset -A n=()
$ zmv -n '((*) <1970-2021>-<1-12>-<1-31> )(<->)(.jpg)' '$1${(l[4][0])$((++n[\$2]))}$4'
mv -- 'My other vacation 2021-01-05 0044.jpg' 'My other vacation 2021-01-05 0001.jpg'
mv -- 'My other vacation 2021-01-05 0045.jpg' 'My other vacation 2021-01-05 0002.jpg'
mv -- 'My other vacation 2021-01-05 0046.jpg' 'My other vacation 2021-01-05 0003.jpg'
mv -- 'My other vacation 2021-01-05 0047.jpg' 'My other vacation 2021-01-05 0004.jpg'
mv -- 'My other vacation 2021-01-05 0048.jpg' 'My other vacation 2021-01-05 0005.jpg'
mv -- 'My vacation 2018-05-03 2345.jpg' 'My vacation 2018-05-03 0001.jpg'
mv -- 'My vacation 2018-05-03 2346.jpg' 'My vacation 2018-05-03 0002.jpg'
mv -- 'My vacation 2018-05-04 2347.jpg' 'My vacation 2018-05-04 0003.jpg'

おすすめ記事