首页 > 解决方案 > 我正在编写一个 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

我错误地认为这会起作用。

所以我需要做的是:

  1. 使用 find 从访问时间为 5 天以上的文件夹中获取随机文件(这将防止壁纸过于频繁地重复)
  2. 如果没有访问时间超过 5 天的文件,则获取修改时间为 -1 的文件(如果在过去 5 天内看到所有其他壁纸,这将优先考虑新壁纸)
  3. 如果它不能做其中任何一个,那么只需选择一个随机文件。
  4. 将所选壁纸的路径放入变量“$B”中

我还在学习,我在 Github 上记录我的进步是为了好玩。

标签: bashmacosshell

解决方案


我会做以下事情:

#!/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。不过,我不确定findMac OS X 是否具有所有这些选项。-quit是可选的。您也可以将扩展名放在变量 ( $exts) 中。

编辑:来自这个超级用户帖子

区别?Spotlight 不索引 /tmp,但它索引 ~。我很确定您在这里看到的是在更改 atime 后聚光灯读取文件以对其进行索引 - 然后将 atime 设置回现在。

我相信这可能是您的时间问题。否则 atime 应该在达尔文上工作得很好。您可以将路径添加到异常,或者使用 Spotlight 未索引的路径(/wallpapers可以工作)。


推荐阅读