インデックス付きログファイルが特定のディレクトリに存在しないように、最小のインデックスを見つけます。

インデックス付きログファイルが特定のディレクトリに存在しないように、最小のインデックスを見つけます。

質問:ファイルを含むフォルダがあるとしますlog1.txt, log2.txt, log3.txt, etclog<N>.txt存在しない最小の整数Nを探したいです。これを達成するための簡単なコマンド/方法はありますか?

例:フォルダが空の場合は、コマンドを返す必要がありますlog1.txt。フォルダが存在する場合、log1.txt, log2.txtコマンドはを返す必要がありますlog3.txt

答え1

bashスクリプトによる:

#!/bin/bash
i=1
while [ -f "log${i}.txt" ]; do
  ((i++))
done
echo "log${i}.txt"

$iwhileループは、ファイルが存在する限り変数を増やしますlog${i}.txtecho存在しないファイル名と次の番号を出力します。

答え2

この恐ろしいパイプは必要な操作を行います(必要に応じてコメントアウトされていない部分を一緒に接続して、読み取れない限り行を作成します)。

設定

touch log{1..13}.txt log{15..20}.txt

最初に利用可能な商品の配置場所を探す

( find log*.txt | sort -V; echo X ) |     # List the files and an extra one at the end
    nl |                                  # Add line-numbers
    tr -dc '[:digit:][:space:]' |         # Strip away non-numeric parts
    sed -r '/ ([1-9][0-9]*)\t\1$/d' |     # Delete lines with two matching numbers
    awk '{print $1; exit}'                # Print the the line number of the first remaining match

出力

14

後で足りないスロットを埋めると

touch log14.txt

出力

21

他の読者のために、設定を改善する方法を見つけることができればtr | sed | awk(通常はパイプラインが間違って書かれていることを示す)、あなたの提案を聞きたいです。

関連情報