bash - 我正在编写一个 shell 脚本,需要在“if then”语句中结合“find”和“grep”
问题描述
我一直在研究一个脚本,它会根据当前连接的 SSID 自动更改我的 Macbooks 壁纸。它会每 30 分钟选择一个新壁纸
长话短说它工作正常,但我试图通过不允许脚本过于频繁地重复相同的壁纸来创造“随机”的错觉。
目前拉动wallaper的命令如下所示;
find -E -L ~/WallAware/A -type f -regex ".*\.(jpg|gif|png|jpeg)" \( -atime +5 -o -mtime -1 \) | ~/WallAware/gshuf -n 1
我错误地认为这会起作用。
所以我需要做的是:
- 使用 find 从访问时间为 5 天以上的文件夹中获取随机文件(这将防止壁纸过于频繁地重复)
- 如果没有访问时间超过 5 天的文件,则获取修改时间为 -1 的文件(如果在过去 5 天内看到所有其他壁纸,这将优先考虑新壁纸)
- 如果它不能做其中任何一个,那么只需选择一个随机文件。
- 将所选壁纸的路径放入变量“$B”中
我还在学习,我在 Github 上记录我的进步是为了好玩。
解决方案
我会做以下事情:
#!/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
shuf
如果您使用的是 Mac OS X ,请随意替换gshuf
。不过,我不确定find
Mac OS X 是否具有所有这些选项。-quit
是可选的。您也可以将扩展名放在变量 ( $exts
) 中。
编辑:来自这个超级用户帖子:
区别?Spotlight 不索引 /tmp,但它索引 ~。我很确定您在这里看到的是在更改 atime 后聚光灯读取文件以对其进行索引 - 然后将 atime 设置回现在。
我相信这可能是您的时间问题。否则 atime 应该在达尔文上工作得很好。您可以将路径添加到异常,或者使用 Spotlight 未索引的路径(/wallpapers
可以工作)。
推荐阅读
- java - 尝试将随机生成的密码存储为字符串,以便我可以将其保存到文件中(Java)
- firebase - 未定义的名称“联系人” - 有状态小部件中的 Flutter toJson 映射
- r - 包含组均值的多个条形图的分面网格
- laravel - 如何使用 Laratrust 5.2 限制选择框中的某些选项。*
- java - Java 中的 Azure 函数 - 获取远程地址 IP
- python-3.x - Sqlite3、Python 和 Tkinter 登录
- java - 令牌“eqn”上的语法错误删除此令牌
- c# - ASP NET Web 窗体无法注册用户控件 (ascx)
- r - R表函数应用所有列
- c# - 为什么构造函数中的空字符串参数不会引发异常?