Tôi muốn chuyển một số tập hợp con của tập tin từ dirA sang dirB (giả sử các tập tin có "blah" trong tên tệp), nhưng tôi muốn tất cả các thư mục lồng nhau giống nhau ở vị trí mới. Làm thế nào tôi có thể làm điều đó?
Tôi muốn chuyển một số tập hợp con của tập tin từ dirA sang dirB (giả sử các tập tin có "blah" trong tên tệp), nhưng tôi muốn tất cả các thư mục lồng nhau giống nhau ở vị trí mới. Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Sự kỳ diệu của rsync
quy tắc lọc:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Tham khảo rsync
trang hướng dẫn để biết chi tiết về các quy tắc bộ lọc, nhưng đây là phiên bản thu gọn cho nhu cầu cụ thể này.
--filter="+ */"
có nghĩa là "bao gồm tất cả mọi thứ là một thư mục"
--filter="-! *blah*
có nghĩa là "loại trừ mọi thứ KHÔNG bao gồm blah trong tên tệp"
Nếu bạn cần sao chép những tập tin này thì cp sẽ làm:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
Tùy chọn --parents
bảo tồn các thư mục con - nó tạo đường dẫn thư mục đầy đủ cho đích.
Điều này làm việc cho tôi:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/
Các -e
định nghĩa công tắc rsync
chuyển giao thức với cổng như -p 22
. Ngoài ra, dấu /
gạch chéo rất quan trọng để cho chương trình biết nó đang xử lý các thư mục.
Cảm ơn @pdo vì đã thêm giờ trong ngày làm việc của tôi!