![인덱스된 로그 파일이 특정 디렉터리에 존재하지 않도록 가장 작은 인덱스를 찾습니다.](https://linux55.com/image/156829/%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%90%9C%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%ED%8A%B9%EC%A0%95%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8F%84%EB%A1%9D%20%EA%B0%80%EC%9E%A5%20%EC%9E%91%EC%9D%80%20%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC%20%EC%B0%BE%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
질문:파일을 포함하는 폴더가 있다고 가정합니다 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
(일반적으로 파이프라인이 잘못 작성되었음을 나타냄), 여러분의 제안을 듣고 싶습니다.