找到文件并设置自动任务以便以后使用命令对其进行检查

时间:2018-10-30 06:19:32

标签: bash

鉴于我找到了所有降价文件并将其保存为found.md,然后安排一个自动任务以vscode打开found.md

find / -regex ".*\.pdf$" 2>/dev/null 1>found.md |
#later is peudocodes
at "code found.md" now + 10 minutes #how make this code working

找到文件并在忘记时自动检查它。 我该如何为命令设置计时器?

2 个答案:

答案 0 :(得分:1)

您有两个问题。两者都在man at中进行了描述:

  

对于批量生产,从标准输入中读取命令或   -f选项指定并执行的文件。工作目录,环境(变量除外,BASH_VERSINFO, DISPLAY ,EUID,GROUPS,SHELLOPTS,TERM,UID和_)和umask一直保留调用。

at只能从管道或文件中读取命令。将命令指定为参数不起作用。您的at在管道中,但是由于所有输出都已重定向,因此该管道为空。

at不是用于打开图形程序的,但是您可以通过设置DISPLAY变量使其起作用。

find / -regex '.*\.pdf$' 2>/dev/null 1>found.md
echo 'export DISPLAY=:0; code found.md' | at now + 10min

如果这不起作用,则可以使用sleep代替at

sleep 600; code found.md

但是,使用sleep必须保持终端处于打开状态。解决方法是,您可以使用nohup

nohup bash -c '(sleep 600; code found.md) &'

顺便说一句,您可以将-regex '.*\.pdf$'替换为-name '*.pdf'甚至是-iname '*.pdf'

答案 1 :(得分:1)

如果要使用at安排命令,则必须将这些命令发送到其标准输入。在bash和其他一些shell中,您可以执行以下操作:

at now + 30 minutes <<< "code found.md"

但是,在普通的sh外壳中,您需要将命令管道放入at

echo "code found.md" | at now + 30 minutes

如果以交互方式使用外壳,也可以简单地启动at并让其询问您的命令:

at now + 30 minutes    # hit [ENTER] here to start `at` with a prompt
code found.md          # enter your command and submit it with [ENTER]
                       # hit Ctrl+D to exit the prompt

PS:在所有示例中,code found.md是您要计划的命令。