find命令的“exec”功能可以在后台启动程序吗?

时间:2009-05-12 15:42:58

标签: linux bash unix

我想做点什么:

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

可能?还有其他可比较的方法吗?

2 个答案:

答案 0 :(得分:13)

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

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

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

即使转义它也不起作用,因为find -exec实际上是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

将打开默认程序中与桌面环境相关联的文件。

答案 1 :(得分:1)

如果您的目标只是不必关闭一个pdf以查看下一个pdf而不是在其自己的单独实例中显示每个pdf,那么您可以尝试

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

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

kpdf必须能够在命令行中获取文件列表才能使用,因为我自己不使用它我不知道这个。