Existem várias maneiras, cada uma mais voltada para uma necessidade específica. Bem-vindo ao mundo do UNIX.
Isso executa os comandos por meio de nohup
:
find . -type f -name 'abc' | xargs -I '{}' nohup '{}' -p
Explicação :
find .
procura no diretório atual e nos subdiretórios.
-type f
procura por um arquivo.
-name 'abc'
o nome do arquivo deve ser exatamente "abc" (diferencia maiúsculas de minúsculas).
|
canaliza a lista resultante de arquivos para outro programa.
xargs
envia as entradas individuais para outro programa.
-I '{}'
na expressão a seguir, substitua '{}'
pela entrada.
nohup
este é o programa que xargs
chamará várias vezes, sempre passando um dos resultados find
como um parâmetro. Este programa é usado para iniciar tarefas que serão executadas em segundo plano e não serão interrompidas se a sessão atual for desconectada. Para permitir que você verifique os resultados, a saída dos comandos executados através de nohup
é, por padrão, anexada ao arquivo nohup.out
no diretório atual.
'{}'
, este é um marcador de posição e será substituído pelos resultados find
.
-p
, isso será adicionado como um parâmetro adicional.
Exemplo: digamos que você tenha um arquivo chamado "abc" na pasta atual e outro em uma subpasta chamada "sub"; os comandos que serão executados são:
nohup ./abc -p
nohup ./sub/abc -p
Nota: pode ser útil executar xargs -p
, pois ele exibirá cada comando antes de executá-lo. Responder y
irá realmente lançá-lo, n
irá ignorá-lo ( find . -type f -name 'abc' | xargs -p -I '{}' nohup '{}' -p
).
Ou usando sudo
:
find . -type f -name 'abc' | xargs -I '{}' sudo -u $USER '{}' -p
sudo
executa um comando e permite escolher o usuário para o qual ele deve ser executado. Neste exemplo, ele usa o usuário atual, cujo nome é encontrado na variável de ambiente $USER
.
Ou usando bash
(ou seu shell favorito):
find . -type f -name 'abc' | xargs -p -I '{}' bash -c "'{}' -p"
Aqui os comandos são passados para o bash, mas você pode optar por executá-los com um shell diferente (se você tiver instalado, é claro). Basta substituir bash
por sua escolha de sh
, csh
, tcsh
, ksh
, zsh
...
Ou usando parallel
:
find . -type f -name 'abc' | parallel --no-notice -I '{}' "'{}' -p"
parallel
geralmente não é instalado por padrão, mas pode valer a pena usar; pense nisso como um xargs
aprimorado (ele é escrito para funcionar com as mesmas opções) que tem o recurso útil de poder executar as entradas que ele recebe em vez de sempre precisar passá-las para outro programa (pelo menos, eu não era Não é possível obter xargs para fazer isso). Como o próprio nome sugere, os comandos são, por padrão, executados em paralelo maximizando a utilização de cpu / thread. A opção --no-notice
oculta a citação que sempre mostra até ser executada com --bibtex
.
Ou com at
:
find . -type f -name 'abc' | xargs -I '{}' echo '{}' -p | at now
at
agenda um comando para ser executado na hora especificada; neste exemplo now
é usado para executar os comandos imediatamente.