查找最小索引,使得索引的日志文件不存在于特定目录中

查找最小索引,使得索引的日志文件不存在于特定目录中

问题:假设有一个包含 files 的文件夹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(这通常表明管道编写得不好),我很想看看您的建议。

相关内容