Мне нужно синхронизировать очень большую структуру каталогов (несколько сотен ГБ) между машиной 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 указывает их в командной строке.)