find命令的“exec”function可以在后台启动一个程序吗?

我想做一些事情:

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \; 

可能? 其他一些可比的方法可用?

Solutions Collecting From Web of "find命令的“exec”function可以在后台启动一个程序吗?"

首先,它不会像你输入的那样工作,因为shell会将其解释为

 find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \; 

这是在后台运行的无效find ,后面跟着一个不存在的命令。

即使转义它也不起作用,因为find -exec实际上是给定的参数列表,而不是将其赋给shell(这实际上是处理&背景)。

一旦你知道这个问题,你所要做的就是启动一个shell来给这些命令:

 find . -iname "*Advanced*Linux*Program*" -exec sh -c '"$0" "$@" &' kpdf {} \; 

另一方面,鉴于你想要做什么,我会建议其中之一

 find ... -exec kfmclient exec {} \; # KDE find ... -exec gnome-open {} \; # Gnome find ... -exec xdg-open {} \; # any modern desktop 

这将在您的桌面环境关联的默认程序中打开该文件。

如果您的目标不是为了看到下一个pdf而关闭一个pdf,而是要在每个pdf中单独显示它们,您可以尝试

 find . -iname "*Advanced*Linux*Program*" -exec kpdf {} \+ & 

使用加号变量,-exec会像xargs一样构建命令行,以便将所有找到的文件交给kpdf的相同实例。 &最后影响整个发现。 如果发现大量的文件,它们可能仍会批量打开它们,因为命令行太长了,但是就系统上的资源消耗而言,这甚至可能是件好事。 ;)

kpdf必须能够在命令行上获取文件列表才能工作,因为我自己并不使用它,我不知道这一点。