mktemp(1)
쉘 스크립트에서 이를 사용하여 적절한 접미사와 접두사가 있는 디렉토리에 임시 파일을 생성할 수 있습니다.
패턴(예 NN-output.log
: )이 주어지면 해당 패턴을 찾아서 존재하는 경우 (또는 사용 가능한 다음 번호) 01-output.log
반환하는 명령이 있습니까? 02-output.log
스크립트에 직접 명령을 작성할 필요 없이 "사용 가능한 다음 연속 파일 이름을 가져오는" 명령을 원합니다.
고유한 증분 파일 이름을 얻기 위해 또는 비슷한 것을 사용할 수 있다는 것을 알고 있지만 date -Iseconds
더 간단한 증분 파일 이름을 생성할 수 있는 것이 있습니까?
이런 프로그램을 작성하는 것이 쉽다는 것은 알지만 직접 작성하기 전에 누군가 이미 작성했는지 확인하고 싶습니다.
고쳐 쓰다누군가 "스크립트가 패턴을 어떻게 알 수 있나요?"라고 묻자 저는 mktemp처럼 패턴을 프로그램에 제공하면서 제안했습니다. 예를 들어 "output-XX.log라는 다음 파일을 주면" 프로그램은 X를 보고 이를 채우고 01
파일을 찾는 등의 작업을 수행합니다.
답변1
최소한 ksh 및 bash에서 작동하는 쉘 기능은 다음과 같습니다. 의견에서 알 수 있듯이 이 특정 질문에서 예상되는 입력 패턴은 하드 코딩되어 있습니다. 즉, 형식은 "XX"(2개의 X로 나타남) 다음에 질문에서 제안하는 것처럼 (무언가)가 아닙니다. .
스크립트는 매개변수 확장을 사용하여 선행 XX를 제거하고 나중에 추가된 인덱스로 n
재구성 할 수 있도록 저장합니다. 그런 다음 1부터 99까지 반복하고 필요한 경우 숫자를 0으로 채운 다음 [ ! -f ... ]
해당 파일이 존재하지 않는지 확인합니다 . 존재하지 않으면 파일 이름을 인쇄하고 return 0
성공하면 ( )를 반환합니다. 사용 가능한 파일을 찾지 않고 루프를 종료하면 >&2
stderr()에 메시지를 인쇄합니다.아무것도 없다stdout으로 전송하고 실패 반환 코드( return 1
)를 반환합니다.
# hard-coded to expect an input pattern of XX(something)
function rmktemp {
pattern=$1
suffix=${pattern#XX}
n=1
while [ $n -lt 100 ]
do
if [ $n -lt 10 ]
then
n="0${n}"
fi
tfile="${n}${suffix}"
if [ ! -f "$tfile" ]
then
printf "%s\n" "$tfile"
return 0
fi
n=$((n+1))
done
if [ $n -eq 100 ]
then
echo Could not find an unused file >&2
return 1
fi
}
다음과 같이 사용하세요:
LOG=$(rmktemp XX-output.log)
[ $? -eq 0 ] && echo stuff > "$LOG"