如何让 find -exec 调用 shell 脚本?

如何让 find -exec 调用 shell 脚本?

取自最后一个答案(im3r3k):如何递归地粉碎整个目录树?

我正在尝试获取find调用 shell 脚本的命令,如下所述。

到目前为止我已经尝试过:

find /home/shredtest/* -depth -exec /home/test.sh {}\;

where/home/shredtest是我想要粉碎其内容的目录(但不删除/home/shredtest自身,并且/home/test.sh要运行的脚本在哪里。我做了chmod +x /home/test.sh

上面的命令find返回:

find: -exec CMD 必须以 ';' 结尾

我也尝试过:

find /home/shredtest/* -depth -exec /home/test.sh "{}"\;
find /home/shredtest/* -depth -exec /home/test.sh {}\;
find /home/shredtest/* -depth -exec sh /home/test.sh "{}"\;
find /home/shredtest/* -depth -exec sh \/home\/test.sh {}\;
find /home/shredtest/* -depth -exec sh \/home\/test.sh "{}"\;

所有这些都返回相同的错误。

所以:

  1. 为什么-exec看不到分号?显然它就在那里并且逃脱了,所以一定是其他地方出了问题。我就是没看到。
  2. 我是否以正确的方式解决这个问题,或者是否有更好的方法来实现这一目标?

答案1

必须;是它自己的单独参数find

find /home/shredtest/ -depth -exec /home/test.sh "{}" \;

(注意{}和之间有空格\;)。后-exec

find 的所有以下参数都被视为命令的参数,直到出现由“;”组成的参数遇到。

(从man find)。也就是说,论证必须包括完全停止;参数列表。

您还可以使用“+”一次传递多个文件参数,这些参数也必须是它自己的参数。


另请注意,在 中find /home/shredtest/**不必要的:find将遍历目录内容本身,而*将由 shell 扩展(有时可能不会完全得到您想要的结果)。

相关内容