質問:ファイルを含むフォルダがあるとしますlog1.txt, log2.txt, log3.txt, etc
。log<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"
$i
whileループは、ファイルが存在する限り変数を増やしますlog${i}.txt
。echo
存在しないファイル名と次の番号を出力します。
答え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
(通常はパイプラインが間違って書かれていることを示す)、あなたの提案を聞きたいです。