如何将此bash命令推广到函数中?

如何将此bash命令推广到函数中?,bash,Bash,我试图编写一个bash函数,从当前工作目录中递归地删除特定类型的所有文件。我编写了一个函数,当我将其输入到终端时,该函数可以工作: find /tmp -name '*.swp' -exec rm {} \; 但是,当我试图通过将函数放入这样的函数中来概括该函数时: cleanup() { find . -name *."$1" - exec rm {} \; } 实际输出结果是: find . -name '*.swp' - exec rm '{}' ';' 我得到了一个错误: fi

我试图编写一个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]

我做错了什么?

确保您的命令相同

cmd
find/tmp-name'*.swp'-exec rm{}

func
查找-姓名*“$1”-行政管理{}\

请注意函数的
-exec
上的空格。它应该是
-exec

更新


在@Cyrus point上,确保
*。
放在引号内,以防止bash globbing
查找-名称“*。$1”-执行rm{}\

引用
*
以防止bash的全球化:

cleanup()
{
  find . -name "*.$1" -exec rm {} \;
}

正如其他人指出的,您的命令中的空格导致了问题。另外,如果您的find版本支持-delete标志,我认为-delete标志会更容易一些

cleanup()
{
  find . -name "*.$1" -delete;
}

-exec
!=<代码>-exec
。额外的空间是不好的,但请注意赛勒斯提出的观点;
*
应该在某种引号内。使用
+
代替
\,可以改进脚本
(它将在一次操作中删除多个文件),或者-如果您有GNU
查找
,请使用
-delete
代替
-exec
和后续选项。是的,我刚才回答的是关于OP出错的问题。我会用这个评论更新答案。