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


2

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

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

然而,这一直给我一个错误,即在参考正在迭代的文件时找不到命令。如何解决此脚本的问题?


添加set -x到脚本的顶部?输出应该让你非常清楚问题是什么。
Zoredache 2015年

Answers:


1

你需要[[和周围的空间]]

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

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

替代

无需循环:

find . -maxdepth 1 -newer "$1"

0

你之后需要一个空间[[和另一个空格]]。这是一个遗留物[,传统上是一个实际的可执行文件(/bin/[符号链接到/bin/test) - 你需要一个空间来强制它[expression参数而不是参数进行评估[expression

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

通常还建议[尽可能在脚本中使用POSIX兼容。[[不是标准的,因此不适用于所有POSIX shell。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.