Как я могу исключить все подкаталоги, но включить файлы каталога в rsync?

Я хочу сделать резервную копию своей системы Ubuntu, и мне нужно заботиться о двух разделах: один - /, другой - /home.

Я, скорее всего, захочу сделать резервную копию /. Это не так уж и много, поэтому я могу носить его на своей SD-карте, будучи достаточно отзывчивым, чтобы заставить меня захотеть получить его изображение (вот почему я сейчас пытаюсь использовать rsync).

И что касается /home, у него есть много подкаталогов, которые мне не нужны, поэтому я вряд ли включу их, но я хочу позаботиться о файлах там, таких как .bash_history, .bashrc, .face и т. Д.

Итак, я хочу исключить все подкаталоги при включении файлов в /home. Как мне этого добиться?

--exclude "*/" не работал. "/*/", "/**/", --include "*" --exclude */ не показывают мне, чего я хочу. по крайней мере, он скопировал исходную папку, не копируя ничего внутри нее.

12
задан 4 June 2015 в 11:28

4 ответа

Попробуйте эту команду:

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

, Это будет только копировать файлы в доме без каталогов

0
ответ дан 4 June 2015 в 11:28

Если Вы хотите решить это с --include и --exclude параметры, необходимо изменить порядок их: сначала исключите то, что Вы хотите, затем включаете все. Я обычно делаю это с этой командой:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
0
ответ дан 4 June 2015 в 21:28
  • 1
    Спасибо за Ваш ответ! Слишком плохо то, что это не возможно, но я думаю I' ll быть в состоянии жить с ним:) – JKR 10 September 2016 в 05:20

По умолчанию, rsync не копирует каталоги. Возможно, Вы используете эти -a флаг. Если это верно, заметьте, что согласно страница справочника , -a эквивалентна -rlptgoD, поэтому если Вы не хотите рекурсивно вызывать, просто используйте -lptgoD.

0
ответ дан 17 April 2019 в 22:44

Попробуйте это:

rsync -r --exclude='*/' source/ destination/

Источник: https://lists.samba.org/archive/rsync/2008-September/021746.html

0
ответ дан 17 April 2019 в 22:44

Другие вопросы по тегам:

Похожие вопросы: