Office 2011, Mac OS Lion, Excel создает временный файл на Windows Server 2008, общий доступ к SMB, как остановить?
При использовании Excel 2011 у меня возникла проблема с Mac и общим ресурсом Windows SMB.
Если я открою документ Excel из общего ресурса Windows, он создаст "файл Ghost", начинающийся с ~$, затем полное имя файла, например:
Если я открыл testdoc.xlsx, будет создан файл-призрак с именем ~$testdoc.xlsx, это не является серьезной проблемой, так как при закрытии документа файл удаляется.
Этот файл становится проблемой, когда мои пользователи работают через VPN и если они отключают свою VPN, не закрывая документ об исключении, файл "Ghost" остается позади, и тогда любой пользователь Mac может открыть файл только для чтения, пока этот файл не станет удален.
Я попытался с помощью команды Apple::
по умолчанию напишите com.apple.desktopservices DSDontWriteNetworkStores true
Эта остановка приводит к тому, что маки пишут ресурсы и 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