Linux 可以使用find命令';s";执行官;在后台启动一个程序?

Linux 可以使用find命令';s";执行官;在后台启动一个程序?,linux,bash,unix,Linux,Bash,Unix,我想做一些类似的事情: find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \; 可能吗?还有其他类似的方法吗?首先,它不会像您键入的那样工作,因为shell会将其解释为 find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \; 这是一个在后台运行的无效的find,后跟一个不存在的命令 即使转义它也不起作用,因为find-exec实际上execs参数列表

我想做一些类似的事情:

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

可能吗?还有其他类似的方法吗?

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

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} &
\;
这是一个在后台运行的无效的
find
,后跟一个不存在的命令

即使转义它也不起作用,因为
find-exec
实际上
exec
s参数列表是给定的,而不是将其提供给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 {} \+ &
使用plussed变量,-exec像xargs一样构建命令行,因此找到的所有文件都将被交给同一个kpdf实例。最后,&会影响整个发现。发现大量文件后,由于命令行过长,可能仍会成批打开这些文件,但对于系统上的资源消耗而言,这甚至可能是一件好事。;)


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

尝试时会发生什么?您可以尝试转义似乎工作的'&'(即'\&')@dsm。但是它引起了另一个问题,{}返回的一些文件名有空格和命令barfs。一个简单的解决方法?单独使用\&不应该是便携的。。。如果您通过将整个内容放入引号(“kpdf{}&”)来逃避它,那么是的,您将遇到不可行的引号问题。嗯,在大多数情况下,它们都可以解决,但这是一种痛苦。请看我的答案(我认为是)一个更好的解决方案。谢谢。kfmclinet/gnome公开赛正是我所需要的。+1优秀;信息、质量和安全代码。虽然我个人不确定在仅指定单个位置参数时是否会使用“$@”。我会用“$1”来明确表示,或者用+代替\;如果kpdf支持