使用bash自动生成文件名

the*_*000 2 linux file-management bash

让我们假设我有这样的文件:

out-1.avi
Run Code Online (Sandbox Code Playgroud)

我想要一段 bash 代码,它将为我提供此类列表的下一个文件名:

out-1.avi
out-2.avi
out-3.avi
etc.
Run Code Online (Sandbox Code Playgroud)

编辑我需要实现的是获取网络摄像头录制脚本的下一个文件名,这样它就不会被覆盖!

AFH*_*AFH 5

我不知道上下文,但以下循环包含您需要的所有元素:-

n=0; while (($n < 10)); do ((++n)); echo name=out-$n.avi; done
Run Code Online (Sandbox Code Playgroud)

这将列出序列中的前 10 个文件。

在您编辑后,我看到了几个答案。

我的原始循环的一个简单修改是:-

n=1; while [ -f out-$n.avi ]; do ((++n)); done; echo name=out-$n.avi
Run Code Online (Sandbox Code Playgroud)

这对少数文件很有效,但随着文件数量增加到数百,效率会越来越低。

更有效的答案是将最新的文件编号保存在自己的文件中:-

n=`line<avicount.text`; ((++n)); echo "$n">avicount.text; echo name=out-$n.avi
Run Code Online (Sandbox Code Playgroud)

此脚本每次调用时都会生成一个新名称,但依赖于avicount.text始终与正在使用的文件和名称保持同步。

一个更好的解决方案是使用时间戳而不是序列号:-

echo name=out-`date +%Y%M%d%H%m%S`.avi
Run Code Online (Sandbox Code Playgroud)

这将根据调用脚本时的秒数给出唯一名称,并且在其名称中包含文件的创建时间会很有用。该方案还允许随意删除、存档或以其他方式移动文件,而不会影响未来的文件名。