どのプロセスでも未使用のファイルを見つけて削除するにはどうすればよいですか?

どのプロセスでも未使用のファイルを見つけて削除するにはどうすればよいですか?

~/.wine/drive_c/users/t/Temp/1.4Gバイトのファイルがあることがわかりました*.tmp。その一部は一部のプロセス(各ファイルをで区別できる)で使用されているのに対しlsof、他の一部はどのプロセスでも使用されません。

このディレクトリのファイルは、Wineクライアントプロセスで使用される情報を一時的に保存しますか?

このファイルは削除しても安全ですか?

ワインクライアントプロセスで未使用のファイルのみを削除できる場合は、そのファイルを自動的に見つけて削除できるコマンドをどのように作成しますか?

ありがとうございます。

答え1

ファイルの削除は Wine によって制御されません。 Unixでは、開いたファイルのディレクトリエントリを削除できます。ファイルは、そのファイルを使用するプロセスがファイルを閉じるまで残ります。

必要に応じて実行し、現在開いていないファイルを選択して必要に応じて作業できます。ファイルを開いて閉じる(そして作成および削除も可能)、見て作業することの間の競争。この競合を防ぐことは、メインフレームジョブ入力サブシステムとジョブ制御言語の責任です。ただし、「通常最新」が現在の項目に十分近い場合は、すべてのファイルを一覧表示し、開いているすべてのファイルを一覧表示します。 2回リストされていないファイルは表示時に存在しますが、ほぼ同時にそこにあります。私はそれを見ると開いていません(または見ると開いていますが、それはほとんど同時に見るとそこにはないので、ここで最初にlsofを実行しました)。

GNU/何でも、

sort -r <<EOD | uniq -u | while read; do test -f "$REPLY" && echo rm "${REPLY@Q}"; done
$( cd targetdir
   lsof -Fn +D $PWD | sed -n /^n/s/.//p
   find $PWD -printf %p\\n
)
EOD

削除しても安全に見えるファイルを削除するコマンドのリストが表示されます。

ただし、通常は起動時に一時ディレクトリを消去し、最新のファイルにいくつかの保護を適用するだけです。

find $TMPDIR -ctime +6 -delete

たとえば、少なくとも1週間前に作成されたコンテンツを削除します。

答え2

そしてzsh

echo rm -f ~/.wine/drive_c/users/t/Temp/*(D.^e['fuser -s $REPLY'])

(嬉しいときは削除echo

.ファイル()(隠しファイル(D)を含む)が見つからない通常のファイル()を削除します。fuser^ユーザープロセス。

この操作を再帰的に実行するには、に置き換えるか、***/*を使用することもできますfind

find ~/.wine/drive_c/users/t/Temp -type f ! -exec fuser -s {} \; \
   -exec echo rm -f {} +

(実装でサポートされている場合に置き換えてください-exec rm -f {} +。)-deletefind

関連情報