我试图在 crontab 上运行以下命令,但出于某种原因,我不知道它没有运行。但是,当我在终端上运行它时,它会运行。
IFS= read -r -d $'\0' line < <(find /path/to/folder/ -maxdepth 1 -printf '\%T@ \%p\0' 2>/dev/null | sort -z -n)
file="${line#* }"
我正尝试用它来查找某条路径上最旧的目录。
有人能帮我改正吗?如果要求不算过分的话,解释一下也会很有帮助!谢谢!
编辑
以下是我所得到的信息crontab -e
*/1 16 * * * /path/to/script/test.sh
这是我的脚本
min_dirs=3
mkdir /path/$(date +\%Y\%m\%d\%H\%M)
[[ $(find /path/ -maxdepth 1 -type d | wc -l) -ge $min_dirs ]] &&
IFS= read -r -d $'\0' line < <(find /path/ -maxdepth 1 -printf '\%T@ \%p\0' 2>/dev/null | sort -z -n)
file="${line#* }"
rm -rf "$file"
我想要做的是当其他目录已经填满时开始删除最旧的目录,因此 min_dirs 变量
答案1
假设现在一切正常,下面是摘要:
cron
使用/bin/sh
而不是 来执行/bin/bash
。我不是 bash 专家,但我认为您的脚本中至少有一个/bin/sh
不支持的内容。
#!/bin/bash
在脚本顶部添加一行(通常称为“shebang”)表示该脚本应使用该可执行文件执行(它可以不止是 shell,您还可以指定 Python)。这应该可以解决在 下运行 bash 代码的问题/bin/sh
。
我不知道这是否会给您带来问题,但用反引号(`)包围整个脚本是完全没有必要的。