Jak mogę wykluczyć wszystkie podkatalogi, ale dołączyć pliki katalogu do rsync?

13

Chcę wykonać kopię zapasową mojego systemu Ubuntu i mam dwie partycje do opieki: jedna jest /, druga jest /home.

Prawdopodobnie będę chciał wykonać kopię zapasową /. To nie jest nawet tak duże, że mogę go nosić na karcie SD, a jednocześnie jestem wystarczająco elastyczny, aby zmusić mnie do zrobienia jego zdjęcia (dlatego próbuję w tej chwili użyć rsync).

I o /home, ma wiele podkatalogów, że nie dbam o wiele, więc nie będę prawdopodobnie włączyć je, ale chcę, aby dbać o plikach tam, takie jak .bash_history, .bashrc, .facei tak dalej.

Więc chcę wykluczyć wszystkie podkatalogi, jednocześnie dołączając pliki do /home. Jak mogę to osiągnąć?

--exclude "*/"nie działał. "/*/", "/**/", --include "*" --exclude */Nie pokazuje mi, co chcę. przynajmniej skopiował folder źródłowy, bez kopiowania czegokolwiek w nim.

Dinir
źródło

Odpowiedzi:

17

Wypróbuj to polecenie:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

Reguła dołączania wszystkich plików *i wykluczania katalogów*/

Inne podejście do korzystania ze zwykłej kopii cp

cp /home/usr/* /destination

możesz pozbyć się błędów dotyczących katalogów za pomocą przekierowania

cp /home/usr/* /destination 2>/dev/null

Spowoduje to tylko skopiowanie plików w domu bez katalogów

Maythux
źródło
/ proc ma wirtualny nierzeczywisty system plików, powinieneś wykluczyć go z kopii zapasowej, a także / tmp i / run
Maythux
Moje pierwotne polecenie tworzenia kopii zapasowych wyglądało następująco: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
Dinir
/ proc, / tmp i / run, Check! W każdym razie, jak widzicie w moim komentarzu, miałem wykonać kopię zapasową całego systemu plików root z wyłączeniem katalogu domowego, z małymi wyjątkami. Czy -f" */" -f"+ *"wpisanie mojego kodu byłoby bezpieczne? Może tak by było -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir,
powinieneś tego tak -f"- home/dinir/*/" -f"+ home/dinir/*"
używać
ale radzę używać cp do domu, jest o wiele łatwiej
Maythux
3

Jeśli chcesz rozwiązać to za pomocą parametrów --includei --exclude, powinieneś zmienić ich kolejność: najpierw wyklucz to, co chcesz, a następnie dołącz wszystko. Robię to zwykle za pomocą tego polecenia:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Mattia72
źródło
2

Domyślnie rsyncnie kopiuje katalogów. Być może używasz -aflagi. Jeśli jest to przypadek, zawiadomienie, że zgodnie z manualu , -ajest równoważne -rlptgoD, więc jeśli nie chcesz recurse, wystarczy użyć -lptgoD.

Brian Moths
źródło