Назад | Перейти на главную страницу

Игнорировать скрытые файлы Windows при копировании с помощью rsync

Мне нужно синхронизировать очень большую структуру каталогов (несколько сотен ГБ) между машиной Windows и машиной Linux. Я использую rsync для копирования, потому что он автоматически игнорирует неизмененные файлы и более эффективен при копировании измененных файлов (копируя только разницу).

Моя проблема заключается в том, что некоторые приложения, работающие в файловой системе Windows, любят создавать всевозможные файлы метаданных, которые я не хочу копировать. Поскольку все эти файлы скрыты с помощью атрибутов файлов Windows, я подумал, что было бы очень полезно просто указать rsync игнорировать такие файлы. Но справочная страница rsync не предлагает такой возможности.

В настоящее время я монтирую файловую систему Windows с помощью SMB. Когда я использую консоль для вывода списка файлов в каталоге (используя ls -l), он перечисляет все файлы, включая скрытые файлы, но когда я использую nautilus для перечисления файлов, он распознает, что некоторые из них являются скрытыми файлами, и показывает их мне, только если я включаю «показывать скрытые файлы». Поэтому я не уверен, может ли rsync увидеть, что файлы Windows скрыты.

Любые предложения будут действительно полезны.

Чтобы получить атрибуты DOS в Linux, вам нужно отредактировать файл smb.conf.

Есть два разных способа импортировать атрибуты Windows.

Первый вариант - установить map hidden = yes Это будет означать, что для скрытых файлов в Windows в Linux будет установлен мировой бит выполнения. Чтобы это работало, у вас также должно быть как минимум 001 в твоем create mask.

Другой вариант - установить store dos attributes = yes это будет означать, что атрибуты Windows будут храниться в расширенном атрибуте файловой системы Linux под названием user.DOSATTRIB.

rsync не имеет возможности фильтровать файлы на основе нормальных или расширенных атрибутов, но может исключить список файлов, которые вы подготовили другим способом. Вы можете использовать find команда для создания этого списка на основе атрибутов Unix. Версия find Кажется, у меня нет поддержки расширенных атрибутов, но все же можно использовать -exec вариант в find чтобы получить расширенные атрибуты всех ваших файлов и отфильтровать их.

поскольку find может фильтровать обычные разрешения Unix, если вы выбрали опцию World Execution Bit, тогда find . -perm -001 найдет все скрытые файлы в смонтированной файловой системе Windows. Вы можете поместить этот список в файл, а затем использовать rsync --exclude-from=FILE чтобы исключить эти файлы из вашего rsync.

У меня нет ответа, но я не думаю, что rsync - подходящее место для поиска. Я бы попытался найти что-нибудь в параметрах общего доступа на стороне Windows или в параметрах mount.cifs.

Возможно, можно использовать расширения ACL, но в традиционных разрешениях unix нет ничего, что делало бы файл скрытым. Он просто скрыт, если в имени файла / каталога стоит точка.

Я не верю, что rsync имеет какое-либо представление о том, какие файлы помечены как «Скрытые» в общей папке Windows. Есть ли у файлов что-то общее, например, формат именования? Вы можете использовать параметры --exclude или --exclude-from, чтобы имена файлов сопоставления с образцом не копировать. (Параметр --exclude-from = xyz загружает эти исключения из файла, а параметр --exclude указывает их в командной строке.)