如何推广此bash命令以在函数中工作?

时间:2015-06-28 18:07:09

标签: bash

我正在尝试编写一个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]

我做错了什么?

3 个答案:

答案 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;
}