フォルダ内のすべてのファイルの名前を次のように変更したいと思います。PREFIX+COUNTER+FILENAME
例えば。入力する:
england.txt
canada.txt
france.txt
出力:
CO_01_england.txt
CO_02_canada.txt
CO_03_france.txt
答え1
リクエストされた内容は次のとおりです。
n=1; for f in *.txt; do mv "$f" "CO_$((n++))_$f"; done
どのように動作しますか?
n=1
これは変数を
n
1に初期化します。for f in *.txt; do
これにより、名前で始まる現在のディレクトリを繰り返すループが始まります
.txt
。mv "$f" "CO_$((n++))_$f"
これにより、ファイル名がカウンタに
CO_
プレフィックスを持つように変更されます。n
この++
シンボルはbashに変数を増やすように指示しますn
。done
これはサイクルの終わりを示します。
改善する
このバージョンでは、printf
これを使用して数値形式をより効果的に制御できます。
n=1; for f in *.txt; do mv "$f" "$(printf "CO_%02i_%s" "$n" "$f")"; ((n++)); done
特に、この形式は、数字がまだ1桁の場合は、%02i
数字の前に0を付けます。n
答え2
prename
Debianとその派生製品またはPerlパッケージをインストールして、他のシステムでユーティリティを使用してください。Unicode::Tussle
:
prename 's ([^/]*\z) (sprintf("C0_%02d_%s", ++$n, $&))e' england.txt canada.txt france.txt
説明: 各パラメーターについて、デフォルト名 (スラッシュのない最長サフィックス) の名前を変更し、小数点のC0_
2 桁の数字 (使用前の増加、最初の増加、および使用前 0 から始まる) 形式のカウンター値、その後の元の名前。アルファベット順に番号付きの拡張子を持つすべてのファイルの名前を変更するには:$n
_
.txt
prename 's ([^/]*\z) (sprintf("C0_%02d_%s", ++$n, $&))e' *.txt
zsh の場合は、次のようにします。zmv
機能とパラメータ拡張フラグ l
番号を入力してください:
autoload -U zmv
zmv '*.txt' '$f:h/C0_${(l:2::0:)$((++x))}_$f:t'