Может ли команда find "exec" запустить программу в фоновом режиме?

62
7

Я хотел бы сделать что-то вроде:


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

Возможные? Доступен какой-либо другой сопоставимый метод?

спросил(а) 2021-01-19T18:34:09+03:00 2 месяца, 3 недели назад
1
Решение
155

Во-первых, он не будет работать так, как вы набрали, потому что оболочка будет интерпретировать его как


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

который является недопустимым find выполняется в фоновом режиме, за которым следует команда, которая не существует.


Даже экранирование не работает, так как find -exec на самом деле exec приведен список аргументов, вместо того, чтобы давать его оболочке (это то, что на самом деле обрабатывает & для фонового рисунка).


Как только вы знаете, что , что проблема, все, что вам нужно сделать, это запустить оболочку, чтобы дать следующие команды:

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

который откроет файл в программе по умолчанию, соответствующий вашей среде рабочего стола.

ответил(а) 2021-01-19T18:34:09+03:00 2 месяца, 3 недели назад
62

Если вашей целью просто не нужно закрывать один pdf файл, чтобы увидеть следующий, а не показывать каждый PDF файл в отдельном экземпляре, вы можете попробовать


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

С плюсифицированным вариантом -exec создает командную строку, такую ​​как xargs, поэтому все найденные файлы будут переданы одному экземпляру kpdf. Затем и в конце влияет на всю находку. При очень большом количестве найденных файлов он все равно может открывать их в пакетах, потому что строки команд слишком длинны, но в отношении потребления ресурсов в вашей системе это может быть даже хорошо.;)


kpdf должен иметь возможность взять список файлов в командной строке, чтобы это работало, поскольку я не использую его сам, я этого не знаю.

ответил(а) 2021-01-19T18:34:09+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема