Office 2011、Mac OS Lion、Excel 在 Windows server 2008 上创建临时文件,SMB 共享如何停止?

Office 2011、Mac OS Lion、Excel 在 Windows server 2008 上创建临时文件,SMB 共享如何停止?

使用 Excel 2011 时,我遇到了 Mac 和 Windows SMB 共享的问题。

如果我从 Windows 共享中打开一个 Excel 文档,它将创建一个以 ~$ 开头的“Ghost 文件”,然后是完整文件名,例如 ::

如果我打开 testdoc.xlsx,将会创建一个名为 ~$testdoc.xlsx 的幽灵文件,这不是一个大问题,因为当文档关闭时,该文件就会被删除。

当我的用户通过 VPN 工作时,此文件就会成为问题,如果他们在不关闭 Excel 文档的情况下断开 VPN,则会留下“Ghost”文件,然后 Mac 上的任何人都只能以只读方式打开该文件,直到删除此 Ghost 文件。

我尝试过使用 apple 命令::

默认写入 com.apple.desktopservices DSDontWriteNetworkStores true

这会阻止 Mac 将资源分支和 DS 存储文件写入网络文件,但不会阻止此幽灵文件的创建。

有人知道这些文件是什么吗?如何阻止它们被创建?阻止它们安全吗?

亲切的问候

答案1

我想到另一件事,因为它不是备份,它是一个锁文件,其功能是防止其他用户在文件已经打开可供写入时对其进行写入,这并不是一个坏主意。

显然,最好的解决方案是让您的用户采取负责任的行动,但这当然是徒劳的:)。

因此,我要做的是运行一个小的 cronjob,它会搜索此类文件,检查相关文件当前是否打开,如果没有,则删除锁定文件。问题是,我知道检查文件是否打开的唯一方法是lsof列出当前正在访问给定文件的进程。然而,这仅在当前访问该文件的计算机上运行时才有效,而不是从服务器。如果您在服务器上运行它并且您的用户在本地计算机上打开它,它将不会返回任何输出。

根据您的设置,您可以通过检查哪个用户创建了锁文件并在他们的机器上运行脚本来扩展此功能。因此,希望它会有用,下面是将删除引用未被任何程序打开的文件的锁文件的脚本在当前机器上

#!/bin/bash
## Define the regular expression we will use
regex='(.*)~\$(.+)'

## Find all files that begin with "~\$*" in the directory
## specified on the command line, the lockfiles
find ${@} -name "~\$*" -print0 2>/dev/null | while IFS= read -r -d '' file; do

    if [[ $file =~ $regex ]]
    then
        ## Get the name of the file that created the lockfile
        realname=${BASH_REMATCH[1]}${BASH_REMATCH[2]};
        ## Check if the file is currently open
        isopen=`lsof "$realname" 2>/dev/null | wc -l`
        ## If the file is not open (by a program running on the
        ## same machine as this script, delete the lockfile
        if (( $isopen == 0))
        then
            echo "Deleting $file..."
            rm "$file"
        fi
    fi
done

相关内容