我正在尝试编写一个bash函数,该函数从当前工作目录中递归删除某种类型的所有文件。我编写的函数在我输入到终端时有效:
find /tmp -name '*.swp' -exec rm {} \;
但是,当我尝试通过将函数放在这样的函数中来概括函数时:
cleanup()
{
find . -name *."$1" - exec rm {} \;
}
实际输出最终为:
find . -name '*.swp' - exec rm '{}' ';'
我收到错误:
find: paths must precede expression: -
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
我做错了什么?
答案 0 :(得分:4)
确保您的命令相同
cmd :find /tmp -name '*.swp' -exec rm {} \;
func :find . -name *."$1" - exec rm {} \;
注意功能上- exec
上的空格。它应该是-exec
<强>更新强>
在@Cyrus点上,确保*.
放在引号内以防止bash globbing find . -name "*.$1" -exec rm {} \;
答案 1 :(得分:4)
引用*
以阻止bash的通信:
cleanup()
{
find . -name "*.$1" -exec rm {} \;
}
答案 2 :(得分:2)
正如其他人所指出的那样,命令中的空间会导致问题。此外,如果您的find版本支持它,我认为-delete标志更容易一些。
cleanup()
{
find . -name "*.$1" -delete;
}