Tôi tò mò về điều này vì vậy tôi đã làm một chút đào.
Có một vài bản vá để làm điều này mà không bao giờ biến nó thành rsync, nếu bạn thích biên dịch từ nguồn. Mặc dù cả hai đều đã cũ nên có thể vẫn không hoạt động. Cái này đặc biệt thêm một --fat-filenames
tùy chọn và cái này cho một --tr
tùy chọn .
Những câu hỏi này cũng bao gồm một cái gì đó tương tự - các tệp đồng bộ hóa với các ký tự đặc biệt cho USB FAT32 và https://askubfox.com/questions/11634/how-can-i-substolarship-colons-when-i-rsync-on-a-usb- chìa khóa . Đặt cược tốt nhất có lẽ là sao lưu dự phòng thay thế, nhưng tôi không thể thấy bất kỳ tùy chọn nào có quyền kiểm soát đối với nó. Có một số ý tưởng tốt khác mặc dù.
Một ý tưởng sơ bộ cho một tập lệnh sẽ xóa và tạo lại các tệp mỗi lần, nếu không có quá nhiều, sẽ là một cái gì đó như:
[sudo] updatedb # doing this as root will update the system database
locate -r '^/full/path/to/source/.*[?<>\\:*|\"]' |
sed 's\^/full/path/to/source/\\' >bad_names
rsync --delete --exclude-from=bad_names -av source/ target
cd source
<bad_names pax -rw -s '/[?<>\\:*|\"]/_/gp' target
locate
sẽ nhanh hơn find
nếu cơ sở dữ liệu được cập nhật hợp lý.
Cuối cùng, bạn chỉ có thể làm điều này để các tệp không gây ra thêm bất kỳ vấn đề nào (ít nhất là các tệp hiện có):
find source/ -regex '[?<>\\:*|\"]' -exec rename 's/'[?<>\\:*|\"]'/_/g' {} +
Tôi sẽ khuyên bạn nên thử điều đó với rename -n
đầu tiên mặc dù trong trường hợp có điều gì đó không ổn.