我发现~/.wine/drive_c/users/t/Temp/
有1.4G字节的文件*.tmp
。其中一些正在被某些进程使用(我可以通过 来区分每个文件lsof
),而另一些则没有被任何进程使用。
该目录下的文件是否临时存储Wine客户端进程使用的信息?
这些文件可以安全删除吗?
如果我只能删除那些未被任何 wine 客户端进程使用的文件,我该如何编写一个可以自动查找此类文件并删除它们的命令?
谢谢。
答案1
删除文件不受 Wine 的控制,在 unix 中您可以删除打开文件的目录条目。该文件将一直保留到使用该文件的进程将其关闭为止。
做你想做的事情,选择当前未打开的文件,以便你可以随心所欲地处理它们,这是你查看和处理打开和关闭(可能还创建和删除)它们之间的一场竞赛。避免这种竞争是大型机作业输入子系统和作业控制语言的职责。但是,如果“通常是最近的”对您来说足够接近当前,请列出所有文件,列出所有打开的文件,任何未列出两次的文件在您查看时都存在,但在您几乎同时查看时未打开(或者是当你查看时打开,但当你几乎同时查看时不存在,这就是我在这里首先执行 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
例如,删除至少一周前制作的所有内容。
答案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 {} +
为)。-delete
find