Нет, вы не можете сделать это в конфиге. Просматривая sftp-server.c
, я вижу, что единственный способ отключить это - запустить sftp-server
в режиме только для чтения, что совершенно бесполезно, если вы хотите разрешить загрузку :)
Если вы не против поддерживать свой собственный пакет openssh, вы можете удалить вызовы utimes
/ futimes
в sftp-server.c
перед компиляцией. В качестве альтернативы вы можете использовать библиотеку LD_PRELOAD
с noop реализациями этих функций.
Вы можете использовать incond (inotify cron daemon), чтобы запускать скрипт при добавлении файла.
Если у вас есть много загруженных файлов одновременно, вы можете поставить в очередь имена файлов в быть обработанными, затем вы можете обрабатывать элементы очереди по одному.
Я не знаю (но не думаю, что) вы можете сделать это в sshd_config. Однако вот идея: что, если вы измените сценарий обработки так, чтобы файлы сначала попадали во временный каталог, вы берете хеш (возможно, md5) файла и сравниваете этот хеш с файлом с тем же именем в каталог пользователя (если такой файл существует).
Если хеш совпадает, то ничего не делайте (в чем смысл?)
Если хеш не совпадает, то копируйте (не перемещайте) файл из временного каталога в окончательное расположение (конечно, без опции -p).
Вы сказали, что параметр ... "-p" ... устанавливает c / a / mtimes файла ...
- это неверно, так как ctime может быть установлен на текущее время только путем изменения mtime или разрешений inode (или других настроек inode, которые здесь не важны).
Обладая этим знанием, вы можете найти необработанные файлы, используя -cnewer
.
$ FILESTOPROCESS=$(find -H /home/$CUST -type f \
\( -newer /home/$CUST/marker-file -o \
-cnewer /home/$CUST/marker-file \) )