Como testar se os processos estão usando arquivos no diretório

1

Estou tentando usar lsof em uma instrução IF para tar um diretório APENAS se outros programas NÃO estiverem usando arquivos dentro do diretório. Eu posso obter essa informação em um prompt de shell com

lsof +d /mydir/

Se não retornar nenhuma saída, sei que o diretório não está em uso. Como faço para formatar isso em uma instrução condicional para que

if (lsof returns anything) then
  echo "$folder in use"
else
  tar $folder

Obrigado

    
por Jon 18.10.2017 / 23:37

2 respostas

1

Conte os caracteres na resposta, assim:

#!/bin/bash

a="$(lsof +d "${folder}")"

if [[ "${#a}" -gt 0 ]] then
    echo "${folder} in use"
else
    tar "${folder}"
fi
    
por 19.10.2017 / 01:28
0

Você pode tentar contar o número de linhas na saída. Eu recebo uma linha de cabeçalho de nomes de coluna e, em seguida, uma linha de resultado adicional para cada processo ativo, por exemplo:

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    1002 debian  cwd    DIR  254,4     4096 393217 .
lsof    1592 debian  cwd    DIR  254,4     4096 393217 .
lsof    1593 debian  cwd    DIR  254,4     4096 393217 .

Quando eu uso o comando wc -l para contar o número de linhas, ele também conta a nova linha à direita. Isso significa que wc -l deve contar 2 linhas de saída quando não há processos ativos. Então, algo assim deveria funcionar:

if [[ $(lsof +d "${folder}" | wc -l) -gt 2 ]]; then
  echo "${folder} in use"
else
  tar "${folder}"
fi

Também parece que você pode querer usar a invocação de lsof +D (maiúscula 'D' em vez de minúscula 'd') para executar uma busca recursiva de descida completa do diretório.

    
por 18.10.2017 / 23:59