1 votes

Office 2011, Mac OS Lion, Excel crée un fichier temporaire sur un serveur Windows 2008, partage SMB : comment l'arrêter ?

J'ai un problème avec les Mac et un partage SMB Windows, lorsque j'utilise Excel 2011.

Si j'ouvre un document Excel à partir du partage Windows, il créera un "fichier fantôme" commençant par ~$ puis le nom complet du fichier, par exemple : :

Si j'ouvre testdoc.xlsx, un fichier fantôme sera créé sous le nom de ~$testdoc.xlsx. Ce n'est pas un problème majeur car lorsque le document est fermé, le fichier est supprimé.

Ce fichier devient un problème lorsque mes utilisateurs travaillent à travers le VPN et s'ils déconnectent leur VPN sans fermer le document Excel, le fichier "fantôme" est laissé derrière et alors n'importe qui sur un Mac peut ouvrir le fichier en lecture seule jusqu'à ce que ce fichier fantôme soit supprimé.

J'ai essayé d'utiliser la commande apple : :

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

Cela empêche les macs d'écrire des fourchettes de ressources et des fichiers de stockage DS sur les fichiers du réseau mais n'empêche pas la création de fichiers fantômes.

Quelqu'un sait-il ce que sont ces fichiers ? Comment empêcher leur création ? Est-il possible de les arrêter en toute sécurité ?

Bien à vous

1 votes

I pensez à ce sont les fichiers de sauvegarde automatique, si c'est le cas, la seule façon de s'en débarrasser serait de désactiver la sauvegarde automatique.

0 votes

Merci pour le commentaire, j'ai désactivé la sauvegarde automatique mais le fichier reste, dès que le document est ouvert il apparaît.

0voto

Mohsin Points 11

L'autre chose qui me vient à l'esprit, puisque ce n'est pas la sauvegarde, c'est qu'il s'agit d'un fichier de verrouillage dont la fonction est d'empêcher les autres utilisateurs d'écrire dans le fichier s'il est déjà ouvert en écriture, ce qui n'est pas une mauvaise idée.

Il est clair que la meilleure solution serait de faire en sorte que vos utilisateurs agissent de manière responsable, mais c'est bien sûr une cause perdue :).

Donc, ce que je voudrais faire, c'est exécuter un petit cronjob qui rechercherait de tels fichiers, vérifierait si le fichier en question est actuellement ouvert, et si non, supprimerait le fichier de verrouillage. Le problème est que le seul moyen que je connaisse pour vérifier si un fichier est ouvert est le suivant lsof qui liste les processus qui accèdent actuellement à un fichier donné. Cependant, cette ne fonctionnera que si elle est exécutée à partir de l'ordinateur qui accède actuellement au fichier. pas depuis le serveur. Si vous l'exécutez sur le serveur et que votre utilisateur l'a ouvert sur sa machine locale, il ne renverra aucun résultat.

En fonction de votre configuration, vous pourriez être en mesure d'étendre cela en vérifiant quel utilisateur a créé le fichier de verrouillage, et en exécutant le script sur leur machine à la place. Donc, dans l'espoir qu'il sera utile, voici le script qui supprimera les fichiers verrouillés se référant à des fichiers qui ne sont ouverts par aucun programme. sur la machine actuelle :

#!/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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X