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

13

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

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

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

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

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

Dinir
источник

Ответы:

17

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

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

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

Maythux
источник
/ proc имеет виртуальную нереальную файловую систему, вы должны исключить ее из резервной копии, также вы должны исключить / tmp и / run
Maythux
Моя первоначальная команда для резервного копирования была такой:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Динир
/ proc, / tmp и / run, Проверить! В любом случае, как вы видите в моем комментарии, я должен был сделать резервную копию всей корневой файловой системы, за исключением домашней директории, с небольшими исключениями. Было бы безопасно поместить -f" */" -f"+ *"в мой код? Может быть, это будет похоже -f"- home/dinir/*/" -f"+ home/dinir/*"?
Динир
Вы должны использовать это так-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux
но я советую использовать cp для вашего дома, это гораздо проще
Maythux
3

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

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Mattia72
источник
2

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

Брайан Мотс
источник