답변:
가장 쉬운 해결책은 파일 이름에 타임 스탬프를 추가하고 한 자리 숫자를 사용하지 않는 것입니다.
빈 파일을 만드는 가장 쉬운 방법은 것 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