Есть несколько способов, каждый из которых ориентирован на конкретную потребность. Добро пожаловать в мир UNIX.
Это запускает команды через nohup
:
find . -type f -name 'abc' | xargs -I '{}' nohup '{}' -p
Пояснение:
find .
посмотрите в текущем каталоге и его подкаталогах.
-type f
искать файл.
-name 'abc'
имя файла должно быть точно "abc" (с учетом регистра).
|
передать полученный список файлов в другую программу.
xargs
отправляет отдельные записи в другую программу.
-I '{}'
в следующем выражении замените '{}'
записью.
nohup
это программа, которую xargs
будет вызывать несколько раз, каждый раз передавая один из результатов find
в качестве параметра. Эта программа используется для запуска заданий, которые будут выполняться в фоновом режиме и не будут прерываться, если текущий сеанс отключается. Чтобы вы могли проверить результаты, вывод команд, выполненных через nohup
, по умолчанию добавляется в файл nohup.out
в текущем каталоге.
'{}'
это заполнитель и будет заменен результатами find
.
-p
это будет добавлено в качестве дополнительного параметра.
Пример: допустим, у вас есть один файл с именем "abc" в текущей папке, а другой в подпапке с именем "sub"; команды, которые будут выполнены:
nohup ./abc -p
nohup ./sub/abc -p
Примечание: может быть полезно запустить xargs -p
как он будет отображать каждую отдельную команду перед ее выполнением. Отвечая y
он действительно запустит его, n
пропустит его (find . -type f -name 'abc' | xargs -p -I '{}' nohup '{}' -p
).
Или используя sudo
:
find . -type f -name 'abc' | xargs -I '{}' sudo -u $USER '{}' -p
sudo
выполняет команду и позволяет выбрать пользователя для запуска. В этом примере он использует текущего пользователя, имя которого находится в переменной среды $USER
.
Или используя bash
(или вашу любимую оболочку):
find . -type f -name 'abc' | xargs -p -I '{}' bash -c "'{}' -p"
Здесь команды передаются в bash, но вы можете запускать их с другой оболочкой (если она у вас установлена, конечно). Просто замените bash
на ваш выбор sh
, csh
, tcsh
, ksh
, zsh
...
Или используя parallel
:
find . -type f -name 'abc' | parallel --no-notice -I '{}' "'{}' -p"
parallel
обычно не устанавливается по умолчанию, но ее стоит использовать; Думайте об этом как о расширенном xargs
(он написан для работы с теми же опциями), который имеет полезную возможность запуска записей, которые он получает, вместо того, чтобы всегда передавать их в другую программу (по крайней мере, я не смог чтобы получить Xargs, чтобы сделать это). Как следует из его названия, команды по умолчанию выполняются параллельно, что максимизирует использование процессора / потока. Опция --no-notice
скрывает цитату всегда diplays пока не работают с --bibtex
Или с по at
find . -type f -name 'abc' | xargs -I '{}' echo '{}' -p | at now
at
планирует команду, которая будет запущена в указанное время; в этом примере now
используется для немедленного запуска команд.