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)
编辑我需要实现的是获取网络摄像头录制脚本的下一个文件名,这样它就不会被覆盖!
我不知道上下文,但以下循环包含您需要的所有元素:-
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)
这将根据调用脚本时的秒数给出唯一名称,并且在其名称中包含文件的创建时间会很有用。该方案还允许随意删除、存档或以其他方式移动文件,而不会影响未来的文件名。
归档时间: |
|
查看次数: |
10783 次 |
最近记录: |