인덱스된 로그 파일이 특정 디렉터리에 존재하지 않도록 가장 작은 인덱스를 찾습니다.

인덱스된 로그 파일이 특정 디렉터리에 존재하지 않도록 가장 작은 인덱스를 찾습니다.

질문:파일을 포함하는 폴더가 있다고 가정합니다 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"

$iwhile 루프는 파일이 존재하는 한 변수를 증가시킵니다 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(일반적으로 파이프라인이 잘못 작성되었음을 나타냄), 여러분의 제안을 듣고 싶습니다.

관련 정보