我想编写一个脚本来查找和显示给定目录中的常规文件,这些文件在最后1分钟前已经更改,但不是早在10分钟前更改过。
我做了什么不行。
#!/bin/bash
for i in $(find $1 -type f -mmin +1 -mmin -10)
do
echo "$i"
done
答案 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
变为两个参数foo
和bar
,而正确引用的"$1"
正确引用名为foo bar
的目录。
有很多关于shell引用的指南,但它们没有得到应有的关注。许多介绍性文本未能正确解释这些问题,甚至包含不恰当引用的示例。