Làm cách nào tôi có thể loại trừ tất cả các thư mục con nhưng bao gồm các tệp của một thư mục trong rsync?


13

Tôi muốn sao lưu hệ thống Ubuntu của mình và tôi có hai phân vùng cần quan tâm: Một là /, một là /home.

Tôi có thể muốn sao lưu /. Điều này thậm chí còn không lớn đến mức tôi có thể mang nó trên thẻ SD của mình, trong khi đủ phản hồi để khiến tôi muốn có hình ảnh của nó (đó là lý do tại sao tôi đang cố gắng sử dụng rsync tại thời điểm này).

Và về /home, nó có nhiều thư mục con mà tôi không quan tâm đến nhiều vì vậy tôi sẽ không có khả năng bao gồm họ, nhưng tôi muốn chăm sóc về các tập tin trên mạng, chẳng hạn như .bash_history, .bashrc, .face, và vân vân.

Vì vậy, tôi muốn loại trừ tất cả các thư mục con trong khi bao gồm các tệp trong /home. Làm thế nào tôi có thể đạt được điều đó?

--exclude "*/"đã không làm việc. "/*/", "/**/", --include "*" --exclude */Không chỉ cho tôi những gì tôi muốn. ít nhất là nó đã sao chép thư mục nguồn, mà không sao chép bất cứ thứ gì bên trong nó.

Câu trả lời:


17

Hãy thử lệnh này:

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

man rsync

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

Quy tắc bao gồm tất cả các tệp *và loại trừ các thư mục*/

Một cách tiếp cận khác để sử dụng bản sao thông thường cp

cp /home/usr/* /destination

bạn có thể thoát khỏi các lỗi về thư mục bằng cách sử dụng chuyển hướng

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

Điều này sẽ chỉ sao chép các tập tin trong nhà của bạn mà không có các thư mục


/ Proc có một hệ thống tập tin ảo thực, bạn nên loại trừ nó khỏi bản sao lưu, bạn cũng nên loại trừ / tmp và / run
Maythux

Lệnh ban đầu của tôi để sao lưu mọi thứ là như thế này: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 và / chạy, Kiểm tra! Dù sao, như bạn thấy trong nhận xét của mình, tôi đã sao lưu toàn bộ hệ thống tập tin gốc trừ thư mục chính với rất ít ngoại lệ. Sẽ đặt -f" */" -f"+ *"mã trong của tôi được an toàn? Có lẽ nó sẽ như thế -f"- home/dinir/*/" -f"+ home/dinir/*"nào?
Dinir

bạn nên sử dụng nó như vậy-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux

nhưng tôi khuyên bạn nên sử dụng cp cho ngôi nhà của mình, điều đó dễ dàng hơn nhiều
Maythux

3

Nếu bạn muốn giải quyết vấn đề này --include--excludecác tham số, bạn nên thay đổi thứ tự của chúng: đầu tiên loại trừ những gì bạn muốn, sau đó bao gồm mọi thứ. Tôi làm điều đó thường với lệnh này:

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

2

Theo mặc định, rsynckhông sao chép thư mục. Có lẽ bạn đang sử dụng -acờ. Nếu đây là trường hợp, lưu ý rằng theo trang man , -atương đương với -rlptgoD, vì vậy nếu bạn không muốn tái diễn, chỉ cần sử dụng -lptgoD.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.