Điểm:0

Rsync : Giữ nguyên ngày sau khi sao chép

lá cờ cn

Tôi gặp sự cố với các thuộc tính tệp do tôi đã thay đổi hệ thống tệp của công ty mình từ Ubuntu 12 cũ sang NAS Synology.

Ban đầu, tôi đã gắn các cổ phiếu NFS trên hệ thống tệp cũ của mình, sau đó với cp, tôi đã sao chép mọi thứ, mọi thứ đều ổn. Nhưng tôi quên giữ nguyên các thuộc tính và chúng tôi đã mất đặc biệt là ngày, ngày trở thành ngày sao chép chứ không phải ngày thực.

Tôi đã tìm thấy lệnh rsync rsync -vrt --size-only /src /dest Nhưng một số tệp đã bị sửa đổi kể từ khi sao chép và lệnh sẽ ghi đè lên chúng...

Ví dụ: tôi đã cố gắng tạo một tệp trên hệ thống tệp cũ, sao chép tệp đó trên hệ thống tổng hợp mới, sau đó sửa đổi tệp trên hệ thống tổng hợp. Khi tôi sử dụng rsync, tệp sẽ bị xóa và thay thế bằng phiên bản cũ.

Tôi đang tìm kiếm một lệnh, chỉ sao chép dấu thời gian cho các tệp khi tệp có cùng kích thước (chưa được sửa đổi)

Không có vấn đề gì nếu phải mất nhiều thời gian

Chỉnh sửa : Tôi đã thử giải pháp được đề xuất với một thư mục thử nghiệm, không có lỗi nhưng không có bất kỳ thay đổi nào:

old_base=/home/samba/shares/projects/test      
new_base=/mnt/NAS  
cp $old_base $new_base -rv
        `/home/samba/shares/projects/test/1201.txt' -> `/mnt/NAS/test/1201.txt'
        `/home/samba/shares/projects/test/test.txt' -> `/mnt/NAS/test/test.txt'
        `/home/samba/shares/projects/test/1200.txt' -> `/mnt/NAS/test/1200.txt'
        `/home/samba/shares/projects/test/1202/1202.txt' -> `/mnt/NAS/test/1202/1202.txt'

Bây giờ cơ sở mới của tôi giống với cơ sở cũ, nhưng không có dấu thời gian giống như thực tế Tôi sửa đổi một tệp, thêm nội dung để mô phỏng tệp được chỉnh sửa do tôi đã sao chép mọi thứ Sau đó, tôi áp dụng giải pháp của bạn:

    root@xx:/mnt/NAS/test# cd $old_base; tìm thấy . -loại f | xargs ls -s | sắp xếp -k 2,2 >/tmp/old
    root@xx:/home/samba/shares/projects/test# cd $new_base; tìm thấy . -loại f | xargs ls -s | sắp xếp -k 2,2 >/tmp/new
    root@xx:/mnt/NAS# comm -12 /tmp/old /tmp/new | trong khi đọc kích thước tên tệp; chạm vào ${new_base}/${filename} -r ${old_base}/${filename}; xong
    comm: tập tin 2 không được sắp xếp theo thứ tự
    comm: tập tin 1 không theo thứ tự được sắp xếp

Tôi không có lỗi, nhưng không có bất kỳ thay đổi nào (tôi không chắc bạn muốn nói gì về ${filename} nhưng tôi cũng đã cố gắng thay thế nó bằng ${new_base}/*

Chỉnh sửa: 22/07

Tôi không có bất kỳ kết quả khi tôi sử dụng

comm -12 --nocheck-order /tmp/old /tmp/new
lá cờ cn
comm không hoạt động vì nó đang tìm kiếm các tệp được chỉnh sửa bởi trường đầu tiên. Bạn *có thể* chỉ cần sử dụng cờ --nocheck-order để liên lạc.Hoặc xem chi tiết bổ sung trong câu trả lời của tôi.
Điểm:0
lá cờ cn

Phác thảo về cách tôi tiến hành: Liệt kê hai thứ bậc vào một tệp có kích thước. Sắp xếp và so sánh các tệp có kích thước bằng "comm -12" để đưa ra danh sách các tên tệp có cùng kích thước. Sau đó, bạn có thể tạo danh sách dấu thời gian và so sánh hoặc chỉ đưa danh sách đó vào lệnh "touch -r" để sao chép dấu thời gian. Vui lòng không cắt và dán các lệnh này một cách mù quáng -- hãy đảm bảo rằng bạn hiểu những gì chúng đang cố gắng thực hiện.

Trừ khi bạn có một số lượng lớn tệp, việc này sẽ không mất nhiều thời gian như vậy.

Một số lệnh đơn giản (chưa được kiểm tra) sẽ giúp:

old_base = thư mục cơ sở của hệ thống phân cấp với các tệp cũ, dấu thời gian mong muốn

new_base = thư mục cơ sở của hệ thống phân cấp với các tệp mới, dấu thời gian không chính xác

cd $old_base; tìm thấy . -loại f | xargs ls -s | trong khi đọc kích thước tên tệp; làm echo "${filename} ${size}"; xong | sắp xếp >/tmp/old_list

cd $new_base; tìm thấy . -loại f | xargs ls -s | trong khi đọc kích thước tên tệp; làm echo "${filename} ${size}"; xong | sắp xếp >/tmp/new_list

Hãy thử chỉ làm comm -12 /tmp/old_list /tmp/new_list và nhìn vào đầu ra. Nếu đó không phải là tên tệp cần thay đổi dấu thời gian, thì chúng tôi cần tìm ra lý do tại sao không.

comm -12 /tmp/old_list /tmp/new_list | trong khi đọc kích thước tên tệp; chạm vào ${new_base}/${filename} -r ${old_base}/${filename}; xong

Mmmax avatar
lá cờ cn
Tôi không hiểu làm thế nào, vì tôi có hàng triệu tệp, 6TB new_base là gì? Chia sẻ synology nfs?
lá cờ cn
Tôi sẽ chỉnh sửa bài đăng của mình để cung cấp thêm ngữ cảnh.
Mmmax avatar
lá cờ cn
Tôi đã chỉnh sửa bài đăng của mình với kết quả của lần thử
lá cờ cn
Rất tốt để làm một trường hợp thử nghiệm đầu tiên, Mmmax.
Mmmax avatar
lá cờ cn
Tôi đã thêm -nocheck-order vào lệnh comm, bây giờ tôi không có bất kỳ lỗi nào, không trả về, nhưng không có bất kỳ thay đổi nào trong thư mục kiểm tra của tôi
lá cờ cn
@Mmmax.nhìn vào bài viết (đã chỉnh sửa) của tôi. chỉ thử "comm -12 /tmp/old_list /tmp/new_list" và xem bạn có nhận được gì không.
Mmmax avatar
lá cờ cn
Không có kết quả với lệnh này (bài đăng ban đầu đã được chỉnh sửa)
lá cờ cn
@Mmmax Vui lòng thử xem các đề xuất của tôi có ý nghĩa gì và đang cố gắng thực hiện. Là hai danh sách đi ra một cách chính xác? Comm có báo lỗi gì không? Bạn đã đặt ra một vấn đề thú vị và tôi muốn giúp đỡ, nhưng bạn phải cho tôi nhiều hơn để làm việc với bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.