取自最后一个答案(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 "{}"\;
所有这些都返回相同的错误。
所以:
- 为什么
-exec
看不到分号?显然它就在那里并且逃脱了,所以一定是其他地方出了问题。我就是没看到。 - 我是否以正确的方式解决这个问题,或者是否有更好的方法来实现这一目标?
答案1
必须;
是它自己的单独参数find
:
find /home/shredtest/ -depth -exec /home/test.sh "{}" \;
(注意{}
和之间有空格\;
)。后-exec
:
find 的所有以下参数都被视为命令的参数,直到出现由“;”组成的参数遇到。
(从man find
)。也就是说,论证必须包括完全停止;
参数列表。
您还可以使用“+”一次传递多个文件参数,这些参数也必须是它自己的参数。
另请注意,在 中find /home/shredtest/*
是*
不必要的:find
将遍历目录内容本身,而*
将由 shell 扩展(有时可能不会完全得到您想要的结果)。