我想知道是否有可能有一个命令可以创建一个文件,但每次执行该命令时,它都不会覆盖上次执行时创建的文件。
例如:touch test1.txt
将创建一个名为的文件test1.txt
。但下次执行它时,我希望新文件被称为test2.txt
,或类似的名称。这样就不会覆盖已经存在的文件。在某种程度上,它可以多次执行而不会出现问题。
请不要误解我的意思,我并不是想用一个命令来创建多个文件。
提前致谢!
答案1
最简单的解决方案是在文件名中添加时间戳,而不是使用单个数字。
创建空文件的最简单方法是touch test$(date +%Y%m%d-%H%M%S)
,这将生成一个名为的文件test20110802-170410
。第二次test*
将获得较新的时间戳,因此将生成 2 个文件。
答案2
我怀疑是否存在一个通用的命令来做到这一点,但你可以想想这样的事情:
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
。
分割机制应该适应您的需求,并添加各种错误检查。
答案3
如果不需要序列号,那么最简单的方法是使用mktemp
命令。