Grep por todos os nomes de arquivos em um diretório

1

Eu quero obter o status do processo para todos os serviços em execução em um determinado diretório. Agora posso verificar um por um ps -ef | grep ServiceName . Mas existe uma maneira de ls do diretório e ps de cada serviço?

Algo parecido com ps -ef | grep < ls ?

    
por Fueled By Coffee 25.05.2016 / 16:20

3 respostas

2

Já o postou como comentário, isso deve fazer o que você deseja:

ps -ef | grep "$(ls)"
    
por 25.05.2016 / 18:12
2

No Bash:

ps -ef | grep "$(ls)"

(A mesma linha apareceu no comentário do incBrain enquanto eu estava compondo e testando o resto da minha resposta no Debian / Bash.)

Ele gerará lixo se o padrão aparecer em ps output como um argumento de linha de comando (não o comando) ou como parte do comando. Para reduzir isso, usaria find em vez de ls para obter o caminho completo:

ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)

Ainda pode haver algum resultado extra indesejado.

Note que estes não são

services running in a given directory

em vez disso processa com executáveis em um determinado diretório .

Para informar ao diretório de trabalho atual de um processo, você pode ler /proc/<PID>/cwd . O próximo exemplo é (rápido e sujo) ps alternative e mostra que você pode extrair informações de /proc em um formulário que você deseja:

sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "${i}/exe"); D=$(readlink "${i}/cwd"); echo -e "PID=${PID}\tEXE=${E}\tCWD=${D}" ; done | grep "CWD=$(pwd)$"'

Você precisa de sudo para ter acesso a todos os processos. Se isso não for necessário e você desejar executá-lo como usuário comum, a peça nos delimitadores ' será suficiente.

    
por 25.05.2016 / 18:17
0

Talvez algo assim:

processes="$(ps -ef)"
for file in *;do
  grep "$file" <<<"$processes"
done
    
por 25.05.2016 / 16:24

Tags