Строго говоря, следующие цели можно интерпретировать как противоречащие друг другу.
Пожалуйста, смотрите ниже объяснение того, почему ваши аргументы не сработали так, как вы предполагали. Далее ниже см. подходящую альтернативу, которая может подойти для вашей цели (она удовлетворяет требованиям № 1, № 3 и версии № 2).
Почему ваша команда не сработала:
То, как rsync обрабатывает ваши аргументы командной строки, следующие аргументы эквивалентны выражению --exclude='*/'
--exclude='/' - -include='желаемая_подпапка/'
т. е. ваша команда исключила все вложенные файлы, тем самым исключив и файлы в нужных подпапках.
Эта проблема затрагивает ваше второе наблюдение, а именно то, что файлы в цели, которые удаляются в источнике, не удаляются. На самом деле, ваша команда прекрасно справляется с удалением таких файлов на верхнем уровне. Однако файлы на один уровень ниже не удаляются, поскольку они уже исключены. Полезно помнить, что --delete относится к --delete-во время, а не к --delete-before.
Решения, удовлетворяющие требованиям № 1, № 3 и версии № 2: Следующее решение может удовлетворить ваши потребности
rsync -avz --delete --include='includes/*' --include='js/*' --include='css/*' --exclude='*/*' /home/gameboy/abc/ /home/gameboy/PartialMirror/abc/
. Оно удовлетворяет следующим требованиям: 1. Резервирует все файлы и каталоги на глубине 1, но не вложенные файлы. 2. Сделайте резервную копию нужных папок 3. Удаляет файлы в месте назначения, которых нет в источнике.
Другой более громоздкий вариант выглядит следующим образом.
rsync -vlptgoDd --delete src/ dest/
Это удовлетворяет условиям №1 и №3, но исключает все вложенные файлы (помните, что папки также являются файлами в *nix). Я избегал указывать параметр -r, чтобы он не был рекурсивным. Удалить работы и папки на глубине 1 копируются. В дополнение к сохранению временных меток (-t) я включил другие типичные параметры копирования архива.
Более стандартный способ получить различное поведение rsync в разных папках — разбросать правила фильтрации для каждого каталога по иерархии; то есть создавать файлы .rsync-filter для каждой папки, которая требует уникального поведения. Например,
rsync -avF src/ dest/
Попробуйте это:
sudo mount -t cifs //ServerName/Public /mnt --verbose -o vers=3.0,domain=ServerName,username=guest,guest,file_mode=0666,dir_mode=0777
Из-за опции --verbose
может появиться много сообщений независимо от того, успешно это или нет, но если это не удается, скопируйте и вставьте эти сообщения в свой исходный вопрос, чтобы разрешить дальнейшее устранение неполадок.