
> rsync command generator — сначала dry-run, удаление с сеткой▋
Большинство генераторов rsync просто собирают флаги и желают удачи. Этот по умолчанию делает dry-run и отказывается выдавать «голый» --delete: страховочная сетка делает каждое зеркало обратимым.
mrsaynothing· 16 октября 2026 г.· 5 мин чтения
Чем отличается синхронизация от зачистки? Обычно одним флагом. Наберите rsync -a --delete /mnt/empty-usb/ /home/you/ — и rsync старательно приведёт приёмник в соответствие с источником, причём целиком, включая ту часть, где ваш домашний каталог теперь пуст. Каждый генератор, который мне удалось найти на первой странице, радостно прячет этот флаг за чекбоксом; один даже подписывает свой вывод «сгенерировано ИИ и ещё не проверено» — смело печатать такое над командой удаления. Именно эту ложь инструмент и не приемлет: что собрать синтаксис rsync и понять семантику rsync — одна и та же работа. rsync command generator уже запущен — он собирает команду, называет ловушки человеческим языком и обращается с --delete как с заряженным оружием, каким тот и является.
Почему --delete заслуживает предупреждения?
Потому что договор rsync — сделать приёмник идентичным источнику, а --delete распространяет этот договор на удаления. Man-страница говорит прямо: флаг означает «delete extraneous files from the destination dir». Extraneous — это всё, чего нет в источнике, включая то, чего не хватает лишь потому, что вы указали не на тот источник, смонтировали не ту флешку или опечатались в пути. Задача генератора — сделать это последствие видимым до запуска команды, а не после:
| Флаг | Что делает | Что делает, когда вы ошиблись |
|---|---|---|
--delete |
Файлы приёмника, которых нет в источнике, удаляются | Не тот путь источника → файлы приёмника «extraneous» → исчезли |
src/ vs src |
Завершающий слеш копирует содержимое; без слеша копируется сам каталог | Один символ — совершенно иная структура приёмника |
-a |
Архив: рекурсивно + права, времена, владельцы, симлинки | Пропущен → «бэкап», который молча им не является |
--partial |
Хранит недопереданные файлы при обрыве | Ненадёжный канал → весь перенос заново с нуля |
Строка про завершающий слеш — классика. Собственная документация rsync сообщает, что слеш у источника «changes this behavior to avoid creating an extra directory at the destination» — что на языке документации значит: src/ высыпает содержимое в приёмник, src создаёт dest/src и высыпает туда. Два символа. Генератор показывает, какая формулировка действует прямо во время ввода, потому что завершающий слеш — единственный флаг rsync, съевший за свою жизнь больше домашних каталогов, чем rm -rf.
Как взвести удаление безопасно
Вы не снимаете предохранитель — вы добавляете сетку. У генератора два шага взведения: команда выходит с --dry-run, и вы читаете, что произошло бы; только затем переключаете тумблер для настоящего запуска. И в момент, когда появляется --delete, инструмент отказывается выдавать голое удаление. Он пристраивает сетку:
rsync -a --delete \
--backup --backup-dir=/mnt/backup/_rsync_backup_$(date +%F) \
/mnt/usb/ /mnt/backup/
Со включёнными --backup --backup-dir rsync не уничтожает файлы, которые удаляет или перезаписывает, — сначала он отодвигает их в датированную папку. Зеркало в итоге всё равно точное. В тот день, когда выяснится, что источник был смонтирован не тот, ваши файлы лежат в _rsync_backup_2026-10-16/, а не превратились в урок. Обратимость — вот разница между зеркалом и памятью.
Да:
rsync -a --delete --backup --backup-dir=DEST/_rsync_backup_$(date +%F) SRC/ DEST/. Два флага сетки переносят каждый удалённый или перезаписанный файл в датированную папку вместо стирания, поэтому зеркало остаётся точным, а удаления — обратимыми. Сначала dry-run с-n, прочтите список, затем взводите.
проверка: man rsync → у --backup написано «make a backup of every file installed» · строки --backup-dir падают в DEST/_rsync_backup_<date>/, а не в пустоту
Какие флаги подключает генератор
Набор, покрывающий почти любой реальный перенос, сгруппированный так, как вы о нём реально принимаете решения:
- Пути — локальные или удалённые с любой стороны (
user@host:/path), с портом SSH через-e "ssh -p 2222", если это не 22. - Направление — переключатель завершающего слеша, с живой подсказкой «содержимое или каталог».
- Фильтры — шаблоны
--excludeс пресетами для вечных подозреваемых:.git,node_modules, кэши, логи. - Манеры — сжатие
-z,--bwlimit, чтобы ночной бэкап перестал забивать канал всей семье,-Pдля прогресса и возобновления,-c, когда mtime врёт. - Дорожка взведения — dry-run по умолчанию, явный шаг взведения, сетка автоматически прицепляется к любому
--delete.
Результат — одна команда, готовая к вставке (или многострочник с backslash — как вашему терминалу удобнее), плюс встраиваемый сниппет, если хотите генератор у себя на странице. Как и калькулятор VRAM для GGUF, это один HTML-файл, который считает в вашем браузере, — ничто из введённого страницу не покидает, потому что инструмент про безопасное копирование не должен звонить домой.
Какое место в наборе инструментов
Генератор собирает команду; теория живёт в соседних статьях. Rsync против scp — о том, почему дельта-передача rsync бьёт тупое копирование и когда scp всё ещё уместен. Cron против таймеров systemd — половина про расписание: команда rsync из генератора ложится в таймер, а журнальная сторона вопроса «а выполнилось ли» — в шпаргалке по journalctl.
Пропущенный dry-run — это удаление, которого вы не хотели.
Инструмент лежит на github.com/mrsaynothing/rsync-builder — MIT, один файл, без сборки. Если поток взведения когда-нибудь покажется ворчливым — это работает фича; а если назовёте комбинацию флагов, которую сетка не покрывает, открывайте issue — опасные углы как раз и стоит наносить на карту.
$ Похожие записи
GGUF против safetensors — решает среда выполнения, а не формат
Одна модель в трёх контейнерах: 397 MB GGUF Q4_K_M, 1.20 GB GGUF BF16, 1.50 GB safetensors BF16. Байты — честные числа открытых данных, решает среда выполнения.
2026-10-14 · 5 мин чтения

git merge vs rebase — decide in 10 seconds
Merge or rebase, one question decides: did the commit leave your machine? The decision table, the fast-forward case, and the reflog fix when a rebase goes wrong.
2026-10-05 · 7 мин чтения

Fatal: Not a Git Repository? The 60-Second Fix
The four real causes of fatal: not a git repository, ranked plus the one command that tells you which one you have before you touch anything.
2026-09-28 · 7 мин чтения

Git Undo Generator: the Exact Command for Your Mess
Answer three questions — pushed or not, keep or discard, shared or solo — and the git undo generator hands you the exact reset, revert or reflog command.
2026-09-25 · 4 мин чтения
