カウンターを使用してBASHファイルの名前を変更するバッチ

カウンターを使用してBASHファイルの名前を変更するバッチ

フォルダ内のすべてのファイルの名前を次のように変更したいと思います。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

    これは変数をn1に初期化します。

  • 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

prenameDebianとその派生製品または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'

関連情報