現在、LUKSデバイスを簡単にインストールできるようにスクリプトを作成しています。スクリプトにはデフォルトのマウントポイント名()がありますが、data_1
これらのマウントポイントがすでに存在する場合は、まだマウントポイントではない文字列が見つかるまで数字のサフィックスを増やして再テストするなどの操作を実行したいと思います。 。
たとえば、次のようにマウントポイントを一覧表示できますlsblk -o MOUNTPOINTS
。
出力は次のように仮定します。
/
/boot
/mnt/data_1
/mnt/data_2
/mnt/data_3
/var/lib/docker
私のデフォルトのマウントポイント名はですdata_1
。ここで、有効な新しいマウントポイント名を取得したいと思います。この場合には、data_4
なぜなら、そしてdata_1
既に存在するからです。このように増加する名前を取得する最も簡単な方法は何ですか?私は奇妙な魔法を歌うことができると思いましたか?data_2
data_3
答え1
本当にawk
命を救うことができます。このコードスニペットでは、マウントポイントの前にdata
アンダースコアでシリアル番号を付けて区切ります。
awk -F '_' -v mp='data' '
BEGIN { re = "^(.*/)?" mp FS "[0-9]+$" } # Build a RE to match relevant mountpoints
$0 ~ re && $NF > x { x = $NF } # Save the highest sequence number
END { print mp FS x+1 } # Print the next value
'
例の出力
data_4
または設定すると両方とも大丈夫mp='/mnt/data'
です/mnt/data_4
。
答え2
$ awk -v base='/mnt/data_' 'sub(base,"") && ($1>max){max=$1} END{print base max+1}' file
/mnt/data_4