Вопрос или проблема
Я использую smbclient для доступа к общей файловой системе Windows. Я не могу смонтировать ее, так как у меня нет соответствующих разрешений.
Как я могу получить только новые или обновленные файлы? (Аналогично для mput).
Я думаю, что не могу использовать rsync, потому что rsync работает только при монтировании файловой системы Windows, что я не могу сделать. Я могу получить доступ только через smbclient.
Вы можете использовать архивный бит (предполагая, что никто другой не изменяет архивные биты на файлах, которые вас интересуют).
Windows устанавливает этот бит всякий раз, когда файл создается или изменяется.
smb: \> archive 2
Команда проинструктирует SMB работать только с файлами, у которых установлен этот бит, и сбросить его в ноль после завершения.
Таким образом, это поможет с mget
. Для mput
потребуется противоположное действие — и серверная часть архивного бита не поможет вам увидеть, какой из ваших файлов был изменен, поэтому это решение работает только для mget
.
Эта операция (получение только измененных файлов и сброс их архивных битов) достаточно распространена, чтобы иметь собственный параметр командной строки. Посмотрите опцию -T
или --tar
с флагами c
(создание) и g
(инкрементально).
.
Ответ или решение
Для IT-специалиста, который работает с smbclient для доступа к общему файловому хранилищу Windows и сталкивается с задачей загрузки только новых или обновленных файлов, имеется несколько подходов. Отмечу, что в данной ситуации речь идет о невозможности монтирования файловой системы Windows, и, следовательно, использование rsync не рассматривается, поскольку это требует монтирования. Рассмотрим решение данного запроса с использованием возможностей smbclient и архивного бита файлов.
Теория
Smbclient представляет собой клиентскую утилиту для службы SMB/CIFS, которая позволяет пользователям доступ к файлам и папкам в файловых системах Windows. Одной из методов отслеживания изменений файлов в Windows является использование архивного бита. Этот бит, чаще всего использующийся в архивных процессах, устанавливается системой автоматически при создании или изменении файлов. Удаление архивационного бита свидетельствует о том, что файл был "архивирован", то есть получен или обработан. В рамках smbclient данный бит может быть полезен для автоматизации процесса выгрузки только измененных файлов.
Пример
Применительно к smbclient, для идентификации и получения только новых или обновленных файлов можно использовать команду, которая работает с архивным битом. Например, следующая команда:
smb: \> archive 2
использует архивный бит для команд mget, что позволяет оперировать только с файлами, у которых этот бит установлен, и автоматически сбрасывает его после завершения операций. Это означает, что вы будете загружать только новые или измененные файлы, так как только они будут иметь установленный архивный бит.
Однако, данная методика применима только для загрузки файлов с помощью mget. Что касается отправки файлов с помощью mput, то здесь архивный бит не предоставит информацию о локальных изменениях, так как он устанавливается и управляется со стороны сервера.
Решение
Таким образом, для автоматизации процесса загрузки только новых или обновленных файлов через smbclient необходимо выполнить следующие шаги:
-
Проверка архивного бита: Использование архивного бита – отличный метод, если сервер, к которому вы обращаетесь, корректно устанавливает этот бит для всех интересующих файлов. Будьте уверены, что только вы или согласованные процессы архивируют файлы, чтобы минимизировать риск некорректной установки бит.
-
Использование флага -T или –tar: Вы можете применить команду с этими флагами, такими как
-T cg
, которые позволяют создавать архив из измененных файлов, что будет полезно для контроля версии и хранения изменений. -
Автоматизация: Создайте скрипт для периодической проверки файлов с установленными архивными битами и их загрузки. Пример на bash может быть следующий:
smbclient //server/share -U username%password -c "prompt; archive 2; mget *"
-
Инкрементальные обновления: Оптимальным подходом будет настройка сценариев для регулярного запуска, описанных выше, например, в cron на сервере Unix для автоматизации процесса загрузки изменений.
Суммируя, использование архивного бита и командной утилиты smbclient открывает возможность эффективно работать с изменениями на менее функциональных системах совместного использования файлов, таких как Windows, без необходимости монтирования файловой системы. Это полезно в сценариях, где права и настройки безопасности ограничивают более интегрированные подходы, такие как использование rsync, предложив достойную замену для управления изменениями файлов.