Bash:如何显示至少在x分钟前更改过的常规文件,但不是早在几分钟前更改过的文件?

时间:2014-01-13 14:12:57

标签: bash

我想编写一个脚本来查找和显示给定目录中的常规文件,这些文件在最后1分钟前已经更改,但不是早在10分钟前更改过。

我做了什么不行。

#!/bin/bash

for i in $(find $1 -type f -mmin +1 -mmin -10)
do
echo "$i"
done

2 个答案:

答案 0 :(得分:0)

如果您不想在调用脚本时转义空格,可以执行

#!/bin/bash
dir="$@"
find "$dir" -type f -mmin +1 -mmin -10

e.g。输出

$ ./script test dir
test dir/test.txt

否则只做

#!/bin/bash
find "$1" -type f -mmin +1 -mmin -10

e.g。输出

$ ./script "test dir"
test dir/test.txt

还要确保您的权限被锁定为只能为您执行,以防止注入攻击。

答案 1 :(得分:0)

你没有解释它是如何“不起作用”的,但如果传入带有空格的参数,你所拥有的将会中断。

find "$1" -type f -mmin +1 -mmin -10

这适用于包含空格或其他有问题字符的一个参数。

find "$@" -type f -mmin +1 -mmin -10

这允许您在命令行上传入多个路径,并使用正确的引号。

尝试mkdir "foo bar" "ick poo"并对其运行脚本。

./myscript foo bar ick poo   # won't work

这显然会收到四个字符串参数,而不是两个带有空格的目录名。不好。

./myscript "foo bar" "ick poo"

这工作提供您的脚本在内部正确引用命令行参数。不带引号的$1变为两个参数foobar,而正确引用的"$1"正确引用名为foo bar的目录。

有很多关于shell引用的指南,但它们没有得到应有的关注。许多介绍性文本未能正确解释这些问题,甚至包含不恰当引用的示例。