Вопрос или проблема
Я регулярно делаю резервные копии своей пользовательской папки с нескольких компьютерных систем. Мне не удалось найти пример того, как объединить все мои резервные папки в одну всеобъемлющую. Если кто-то знает, как написать скрипт для объединения нескольких старых резервных папок в одну всеобъемлющую, содержащую самые последние файлы, я был бы признателен.
Я пытался использовать rsync для объединения двух резервных копий пользовательских папок в одну всеобъемлющую папку со всеми последними директориями и файлами. Сначала я создал две директории на своем внешнем резервном диске, где находятся резервные копии; /merge и /tomerge. Папка, в которую я хотел объединить другие папки, была помещена в директорию /merge. Папка, которую я хотел в нее объединить, была помещена в директорию /tomerge. Обе пользовательские папки имеют одно и то же имя и в основном одинаковую структуру директорий. Если файл существует, его следует пропустить, если он не более новый. Я также хотел удалить исходные файлы, чтобы освободить место на диске после объединения. Я использовал следующую команду:
rsync -rauv –progress –remove-source-files tomerge/ merge/
Похоже, что было передано 244 файла, но количество файлов и размер папки для объединения не увеличились.
Я получил несколько ошибок (код 22 и 23). Ниже приведена последняя часть списка прогресса, но кажется, ничего не было передано.
vance/Documents/Manufactures Data/aavid/._62725_9.75X6X2.28_0.51-degC-per-Watt.PDF
4,096 100% 6.94kB/s 0:00:00 (xfr#239, ir-chk=1014/62203)
vance/Documents/Manufactures Data/aavid/.directory
61 100% 0.10kB/s 0:00:00 (xfr#240, ir-chk=1013/62203)
vance/Documents/Manufactures Data/aavid/62725_9.75X6X2.28_0.51-degC-per-Watt.PDF
84,241 100% 134.42kB/s 0:00:00 (xfr#241, ir-chk=1012/62203)
vance/Documents/Online Orders/1Prov_number.txt
73 100% 0.08kB/s 0:00:00 (xfr#242, ir-chk=1161/63023)
vance/Documents/Online Orders/1V_number~
54 100% 0.06kB/s 0:00:00 (xfr#243, ir-chk=1160/63023)
vance/Downloads/EPSON_DS-510/Image Scan vs Manual
413,103 100% 120.91MB/s 0:00:00 (xfr#244, ir-chk=1001/70705)
rsync: [generator] recv_generator: mkdir “/media/vance/UBUNTU/merge/vance/KiCad/Projects/1000W PFC ” failed: Invalid argument (22)
*** Пропускаем любые содержимое из этой неудачной директории ***
vance/KiCad/Projects/1000W PFC /
отправлено 22,157,872 байт получено 2,921,466 байт 477,701.68 байт/сек
общий размер 95,518,308,087 ускорение 3,808.65
ошибка rsync: некоторые файлы/атрибуты не были переданы (см. предыдущие ошибки) (код 23) в main.c(1338) [sender=3.2.7]
Где я ошибся?
Ответ или решение
Чтобы объединить папки резервных копий с использованием rsync
, важно следовать определённым шагам и учесть возможные проблемы, такие как конфликты имён файлов и каталоги, которые могут иметь недопустимые символы. На основе вашего описания, вы столкнулись с несколькими вопросами, которые мы подробно рассмотрим.
Использование rsync для слияния папок резервных копий
Шаг 1: Понимание вашей команды
Вы использовали следующую команду:
rsync -rauv --progress --remove-source-files tomerge/ merge/
-r
: рекурсивно копирует каталоги.-a
: архивный режим, который включает в себя множество опций для поддержания атрибутов файлов.-u
: обновляет файлы в целевом каталоге только если файлы в источнике более новые.-v
: выводит подробную информацию о процессе.--progress
: отображает прогресс копирования.--remove-source-files
: удаляет файлы источника после успешной передачи.
Основные причины возникновения ошибки 22 и 23:
- Ошибка 22: Указывает на невозможность создания каталога из-за недопустимого имени или символов. В вашем случае каталог "1000W PFC " может содержать пробел в конце, что может быть причиной проблемы.
- Ошибка 23: Сообщает о том, что некоторые файлы или атрибуты не были переданы из-за предыдущих ошибок.
Шаг 2: Как исправить проблему
-
Проверьте имена каталогов:
Убедитесь, что у вас нет пробелов или специальных символов в названиях каталогов, которые могут вызвать проблемы. Переименуйте каталог "1000W PFC " в что-то без пробелов, например, "1000W_PFC". -
Перепроверка команд:
Попробуйте выполнить команду с флагом--ignore-errors
, чтобы игнорировать ошибки и продолжать передачу:rsync -rauv --progress --remove-source-files --ignore-errors tomerge/ merge/
Однако, будьте осторожны с этим флагом; он может привести к потерям данных, если ошибки возникают часто.
-
Используйте
--dry-run
для тестирования:
Перед действительным объединением папок используйте--dry-run
, чтобы увидеть, какие файлы будут скопированы:rsync -rauv --dry-run tomerge/ merge/
-
Убедитесь, что нет прав доступа:
Убедитесь, что у вас есть необходимые права доступа к обоим каталогам, и что ни один файл не находится в использовании. -
Применение кода ошибки:
Для дальнейшего анализа ошибок rsync, проверьте системные журналы, которые могут предоставлять дополнительную информацию о том, почему команда не сработала как планировалось.
Шаг 3: Альтернативный метод
Если проблемы с rsync
продолжаются, вы можете попробовать воспользоваться командой cp
или написать скрипт на Python, чтобы объединить директории, проверяя, что файл более новый:
cp -uR tomerge/* merge/
Этот метод не будет столь эффективен, как rsync
, но может помочь вам в случае с простыми копированием.
Заключение
Использование rsync
для слияния резервных копий может быть мощным инструментом, но требует внимательного подхода к именам файлов и параметрам командной строки. Следуйте приведённым рекомендациям, и вы сможете успешно объединить свои резервные копии в одну целостную папку.
Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь обращаться за помощью.