Answers:
最简单的解决方案是在文件名中添加时间戳,而不使用一位数字。
创建空文件的最简单方法是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