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