首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我正在编写一个shell脚本,需要将"find“和"grep”组合在一个"if Im“语句中。

我正在编写一个shell脚本,需要将"find“和"grep”组合在一个"if Im“语句中。
EN

Stack Overflow用户
提问于 2020-10-06 01:33:42
回答 1查看 55关注 0票数 1

我一直在编写一个脚本,它会根据当前连接的SSID自动更改我的Macbook壁纸。它每隔30分钟就会选择一张新的壁纸。

长话短说,它的工作很好,但我试图创造“随机性”的假象,不允许脚本重复相同的壁纸太频繁。

当前拉墙纸的命令如下所示;

代码语言:javascript
运行
复制
find -E -L ~/WallAware/A -type f -regex ".*\.(jpg|gif|png|jpeg)" \( -atime +5 -o -mtime -1 \) | ~/WallAware/gshuf -n 1

我误以为这会有用。

所以我要做的是:

  1. 使用find从访问时间为5+天的文件夹中获取随机文件(这将防止墙纸重复多次)
  2. 如果没有访问时间为5+天的文件,则获得修改时间为-1的文件(如果在过去5天中看到所有其他壁纸,这将优先处理新的壁纸)。
  3. 如果这两种方法都做不到,那么就选择一个随机文件。
  4. 将路径放置到变量"$B“中选定的壁纸

我仍然在学习,我是记录我在吉顿的进展的乐趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-06 04:10:57

我要做以下几点:

代码语言:javascript
运行
复制
#!/bin/sh

my_find() {
    find -type f '(' -false $(for ext in png jpg gif jpeg; do echo "-o -name *.$ext"; done) ')' "$@"
}

if my_find -atime +5 -print -quit | grep .; then
    B=$(my_find -atime +5 | shuf -n 1)
elif my_find -mtime -1 -print -quit | grep .; then
    B=$(my_find -mtime -1 | shuf -n 1)
else
    B=$(my_find | shuf -n 1)
fi

# then do your stuff with B

如果您在Mac上,可以随意地用shuf代替gshuf。我不确定Mac上的find会有所有这些选项。-quit是可选的。此外,还可以将扩展放入变量($exts)中。

编辑:从这个SuperUser的帖子

区别是什么?聚光灯没有指数/tmp,但它确实指数~。我非常肯定,您在这里看到的是聚光灯,在您更改了atime之后,读取该文件来索引它--这就将atime设置回了现在。

我相信这可能是你的问题。否则,阿提姆应该在达尔文身上发挥很好的作用。您可以将路径添加到异常,也可以使用Spotlight没有索引的路径(/wallpapers可以工作)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64218197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档