我想编写一个脚本,该脚本将查找并显示给定目录中的常规文件,这些文件在最后 1 分钟前已更改,但不早于 10 分钟前。
我所做的不起作用。
#!/bin/bash
for i in $(find $1 -type f -mmin +1 -mmin -10)
do
echo "$i"
done
你不是在解释它是如何"不起作用"的,但如果你传入带有空格的参数,你所拥有的东西就会被破坏。
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
的目录。
贝壳引用有很多指南,但它们没有得到应有的关注。 许多介绍性文本未能正确解释这些问题,甚至包含引用不当的例子。
如果你不想在调用脚本时转义空格,你可以这样做
#!/bin/bash
dir="$@"
find "$dir" -type f -mmin +1 -mmin -10
例如输出
$ ./script test dir
test dir/test.txt
否则就做
#!/bin/bash
find "$1" -type f -mmin +1 -mmin -10
例如输出
$ ./script "test dir"
test dir/test.txt
还要确保您的权限被锁定为仅供您执行,以防止注入攻击。