如何选择随机图像,以便更有可能在Linux中选择较新的图像

时间:2015-06-03 19:15:36

标签: bash random

我在无头Linux服务器上有一个bash脚本,它接受一个文件名作为参数,并在一个投影仪上全屏显示所提供的图像。

用户可以将图像上传到共享文件夹。我希望每隔几秒钟选择该文件夹的随机图片并显示。但不是完全随意的。我希望照片越新(根据它的创作时间),它就越有可能显示出来。因此,所有旧图像也会显示,但较新的图像将更频繁地显示。

有没有办法(使用Bash和标准的unix工具)从文件夹中选择随机图片(没有嵌套文件夹,所有文件都以后缀" .jpg"结尾),以及考虑他们的年龄,所以选择图片的概率越高,它就越高?

如果这个概率不是线性的,那将是最好的:当图片只有几秒或几分钟时,秒就很重要,2小时的图片或2的图片之间不需要有很大的差异小时15分钟。

1 个答案:

答案 0 :(得分:4)

此随机选择jpg文件,其中在过去一小时内创建或修改的文件被选中的次数是三倍,而在过去六小时内创建或修改的文件选择的次数是旧文件的两倍:

{
    find . -name '*.jpg' -mmin -60
    find . -name '*.jpg' -mmin -360
    find . -name '*.jpg'
} | shuf -n1

如何运作

shuf -n1从标准输入上给出的行中随机选择一行。 find命令提供其标准输入。在过去60分钟内修改的文件-mmin -60由所有三个find命令列出。在最后360分钟内修改的那些-mmin -360由三个命令中的两个命令列出。最后一个find命令列出了所有jpg文件。这就是给出概率变化的原因。

您可以根据自己的喜好调整find命令的数量和截止时间。

改进

只要文件的名称中没有换行符,上述操作就会起作用。要处理这种可能性,请使用以空值终止的列表:

{
    find . -name '*.jpg' -mmin -60 -print0
    find . -name '*.jpg' -mmin 360 -print0
    find . -name '*.jpg' -print0
} | shuf -z -n1