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.