命令行:如果文件名已存在,则使用新文件名创建文件

命令行:如果文件名已存在,则使用新文件名创建文件

我想知道是否有可能有一个命令可以创建一个文件,但每次执行该命令时,它都不会覆盖上次执行时创建的文件。

例如: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命令。

相关内容