답변:
가장 쉬운 해결책은 파일 이름에 타임 스탬프를 추가하고 한 자리 숫자를 사용하지 않는 것입니다.
빈 파일을 만드는 가장 쉬운 방법은 것 touch test$(date +%Y%m%d-%H%M%S)그라는 이름의 파일을 초래할 것이다 test20110802-170410. 두 번째 시간 test*은 새로운 타임 스탬프를 얻으므로 2 개의 파일이 생성됩니다.
touch test$(date +%Y%m%d-%H%M%S) ; touch test$(date +%Y%m%d-%H%M%S)파일이 하나만 생성되었습니다. 나노초 시간 작동 : touch test$(date +%Y%m%d-%H%M%S%N) ; touch test$(date +%Y%m%d-%H%M%S%N)와 touch test$(date +%Y%m%d-%H%M%S%N) test$(date +%Y%m%d-%H%M%S%N)두 개의 파일을 각각 만들 수 있습니다.
$()둥지 표현식을 수 있기 때문에,하지만 당신은 또한 역 따옴표를 사용할 수 있습니다 touch test`date +%Y%m%d-%H%M%S`.
그렇게하는 일반적인 명령이 의심 스럽지만 다음과 같이 생각할 수 있습니다.
create() {
read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
while true; do
file="$prefix$number.$suffix"
if [[ -e "$file" ]]; then
((number++))
else
touch "$file"
break
fi
done
}
함수의 입력 매개 변수는 접두사, 숫자, 접미사로 나뉘고 파일이 존재할 때까지 숫자가 증가합니다. 사용 가능한 슬롯이 발견되면 파일이로 생성됩니다 touch.
분할 메커니즘은 필요에 맞게 조정해야하며 다양한 오류 검사가 추가되어야합니다.
시퀀스 번호가 필요하지 않은 경우 가장 쉬운 방법은 mktemp명령 을 사용하는 것 입니다.
TMPFILE=$(mktemp /tmp/example.XXXXXXXXXX) || exit 1 echo "program output" >> $TMPFILE
TMPFILE='/tmp/tmp.$$'; touch $TMPFILE