Office 2011, Mac OS Lion, o Excel cria um arquivo temporário no servidor Windows 2008, o SMB compartilha como parar?

1

Eu tenho um problema com o Mac e um Windows SMB, ao usar o Excel 2011.

Se eu abrir um documento do Excel a partir do compartilhamento do Windows, ele criará um "arquivo do Ghost" começando com ~ $ e, em seguida, o nome completo do arquivo, por exemplo,

Se eu abri o testdoc.xlsx, um arquivo fantasma será criado chamado ~ $ testdoc.xlsx, isso não é um grande problema, pois quando o documento é fechado, o arquivo é removido.

Este arquivo se torna um problema quando meus usuários estão trabalhando através da VPN e se eles desconectarem sua VPN sem fechar o excelente documento o arquivo "Ghost" é deixado para trás e então qualquer um em um mac só pode abrir o arquivo somente até este o arquivo fantasma é removido.

Eu tentei usar o comando apple ::

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

Essa é a parada dos macs que escrevem os forks de recursos e o DS armazena os arquivos para os arquivos de rede, mas não para a criação desse arquivo fantasma.

Alguém sabe o que são esses arquivos? Como impedi-los de serem criados? É seguro pará-los?

Atenciosamente

    
por Kevin 13.12.2012 / 13:24

1 resposta

0

A outra coisa que me ocorre, já que não é o backup, é que é um arquivo de travamento cuja função é impedir que outros usuários gravem no arquivo se ele já estiver aberto para gravação, o que não é uma má idéia.

Claramente, a melhor solução seria fazer com que seus usuários agissem com responsabilidade, mas isso, obviamente, é uma causa perdida:).

Então, o que eu faria seria executar um pequeno cronjob que procuraria por tais arquivos, verificar se o arquivo em questão está aberto no momento e, caso contrário, remover o arquivo de bloqueio. O problema é que a única maneira que conheço para verificar se um arquivo está aberto é lsof , que lista os processos que atualmente estão acessando um determinado arquivo. No entanto, este só funcionará se for executado a partir do computador que está atualmente acessando o arquivo , não do servidor. Se você executá-lo no servidor e o usuário tiver aberto em sua máquina local, ele não retornará nenhuma saída.

Dependendo da sua configuração, você poderá estender isso verificando qual usuário criou o arquivo de trava e executando o script em sua máquina. Portanto, na esperança de que seja útil, aqui está o script que removerá os arquivos de referência referentes a arquivos que não estão abertos por nenhum programa na máquina atual :

#!/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
    
por 13.12.2012 / 15:50