脚本用于检查比参数更新的文件,帮助使用-nt

脚本用于检查比参数更新的文件,帮助使用-nt

我正在尝试编写一个脚本,显示目录中比参数中给出的文件更新的文件,但我似乎遇到了问题。目前我有:

for f in *; do 
    if [["$f" -nt "$1"]]; then 
        echo "$f"
    fi 
done

但是,这一直给我一个错误,即无法找到与正在迭代的文件相关的命令。我该如何修复此脚本的问题?

答案1

你需要在[[和周围留出空格]]

for f in *; do
    if [[ "$f" -nt "$1" ]]; then
        echo "$f"
    fi
done

如果没有空格,您将收到一系列“命令未找到”错误。这是因为 shell 查找名为 的命令[["$f"但找不到它。您要执行的命令是[[

选择

无需循环:

find . -maxdepth 1 -newer "$1"

答案2

您需要在 之后[[和一个空格之前各留一个空格]]。这是从 延续而来的[,传统上它是一个实际的可执行文件(/bin/[,符号链接到)- 您需要一个空格来强制将其作为参数而不是/bin/test进行评估。[expression[expression

虽然[[是一个 bash 关键字,但它有类似的要求。

[通常还建议尽可能在脚本中使用与 POSIX 兼容的版本。[[它不是标准版本,因此不能在所有 POSIX shell 上运行。

相关内容