ディレクトリ内のファイルが他のプログラムで使用されていない場合にのみ、ディレクトリを圧縮するために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」)を使用したいようです。