Як я можу виключити всі підкаталоги, але включати файли каталогу в rsync?


13

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

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

І про те /home, що є багато підкаталогів , що я не дбаю про що , так що я не буду , ймовірно , включати їх, але я хочу , щоб піклуватися про файлах там, таких як .bash_history, .bashrc, .face, і так далі.

Тому я хочу виключити всі підкаталоги, включаючи файли в /home. Як я можу цього досягти?

--exclude "*/"не працював. "/*/", "/**/", --include "*" --exclude */Чи не показує мені , що я хочу. принаймні, він скопіював вихідну папку, не копіюючи нічого всередині неї.

Відповіді:


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

Це копіюватиме лише файли всередині вашого будинку без каталогів


/ 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

але я
радимо

3

Якщо ви хочете вирішити це за допомогою --includeта --excludeпараметрами, вам слід змінити їх порядок: спочатку виключіть те, що ви хочете, а потім включіть все. Я роблю це зазвичай за допомогою цієї команди:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'

2

За замовчуванням rsyncне копіює каталоги. Можливо, ви використовуєте -aпрапор. Якщо це так, то зверніть увагу , що в відповідно до людини сторінці , -aеквівалентно -rlptgoD, так що якщо ви не хочете рекурсию, просто використовувати -lptgoD.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.