Я хочу сделать резервную копию своей системы Ubuntu, и мне нужно заботиться о двух разделах: один - /
, другой - /home
.
Я, скорее всего, захочу сделать резервную копию /
. Это не так уж и много, поэтому я могу носить его на своей SD-карте, будучи достаточно отзывчивым, чтобы заставить меня захотеть получить его изображение (вот почему я сейчас пытаюсь использовать rsync).
И что касается /home
, у него есть много подкаталогов, которые мне не нужны, поэтому я вряд ли включу их, но я хочу позаботиться о файлах там, таких как .bash_history
, .bashrc
, .face
и т. Д.
Итак, я хочу исключить все подкаталоги при включении файлов в /home
. Как мне этого добиться?
--exclude "*/"
не работал. "/*/"
, "/**/"
, --include "*" --exclude */
не показывают мне, чего я хочу. по крайней мере, он скопировал исходную папку, не копируя ничего внутри нее.
Попробуйте эту команду:
rsync -a -f"- */" -f"+ *" /home/user/ destination/
man rsync
-f, --filter=RULE add a file-filtering RULE
правило включать все файлы *
и исключить директоров */
cp
cp /home/usr/* /destination
можно избавиться от ошибок о директорах, использующих перенаправление
cp /home/usr/* /destination 2>/dev/null
, Это будет только копировать файлы в доме без каталогов
Если Вы хотите решить это с --include
и --exclude
параметры, необходимо изменить порядок их: сначала исключите то, что Вы хотите, затем включаете все. Я обычно делаю это с этой командой:
rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
По умолчанию, rsync
не копирует каталоги. Возможно, Вы используете эти -a
флаг. Если это верно, заметьте, что согласно страница справочника , -a
эквивалентна -rlptgoD
, поэтому если Вы не хотите рекурсивно вызывать, просто используйте -lptgoD
.
Попробуйте это:
rsync -r --exclude='*/' source/ destination/
Источник: https://lists.samba.org/archive/rsync/2008-September/021746.html