디렉터리의 파일이 다른 프로그램에서 사용되지 않는 경우에만 디렉터리를 압축하기 위해 IF 문에서 lsof를 사용해 보았습니다. 쉘 프롬프트에서 이 정보를 얻을 수 있습니다
lsof +d /mydir/
출력이 반환되지 않으면 디렉터리가 사용되지 않는 것입니다. 이것을 조건문으로 포맷하려면 어떻게 해야 합니까?
if (lsof returns anything) then
echo "$folder in use"
else
tar $folder
감사해요
답변1
다음과 같이 답변의 문자 수를 계산합니다.
#!/bin/bash
a="$(lsof +d "${folder}")"
if [[ "${#a}" -gt 0 ]] then
echo "${folder} in use"
else
tar "${folder}"
fi
답변2
출력의 행 수를 계산해 볼 수 있습니다. 열 이름 헤더 행을 얻은 다음 각 활성 프로세스에 대한 추가 결과 행을 얻습니다. 예를 들면 다음과 같습니다.
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 .
명령 을 사용하여 wc -l
줄 수를 계산하면 후행 줄 바꿈도 계산됩니다. 이는 wc -l
활성 프로세스가 없을 때 2줄의 출력을 평가해야 함을 의미합니다. 따라서 다음과 같이 작동해야 합니다.
if [[ $(lsof +d "${folder}" | wc -l) -gt 2 ]]; then
echo "${folder} in use"
else
tar "${folder}"
fi
lsof +D
또한 디렉토리에 대한 재귀적 전체 하강 검색을 수행하기 위해 call(소문자 "d" 대신 대문자 "D")을 사용하려는 것처럼 보입니다 .