Tôi đang sử dụng CentOS 5.5 và muốn di chuyển một lượng lớn thư mục trong một tập , giữ lại chúng mtime.
Giải pháp tốt nhất tôi có thể tìm thấy là như thế này:
cp -p -r source/data target/
rm -rf source/data
Với hơn 1TB dữ liệu trên chia sẻ NFS, việc sao chép sẽ diễn ra mãi mãi. Tôi không muốn sao chép. Tôi muốn di chuyển ngay lập tức.
Khi tôi di chuyển một thư mục bằng cách sử dụng mv source/data target/, mtimethư mục (không phải các tệp) sẽ được đặt thành thời gian hiện tại. Điều này là do nội dung của thư mục tôi đang di chuyển được sửa đổi bởi thao tác này ( ..mục nhập đang trỏ đến một nút khác).
Tôi đã đưa ra một kịch bản shell sau đây tôi gọi mv_preserve_mtime.sh:
#!/bin/bash
# Moves source folder to target folder.
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2
Chà, điều đó cũng không hiệu quả. Các thư mục mtimeđược khôi phục, nhưng tất cả các thư mục trong thư mục tôi di chuyển (chỉ những thư mục sâu 1 cấp) được mtimeđặt lại vì những lý do tôi không hiểu.
Có ai có một giải pháp thích hợp, hiệu quả và chính xác?
mvbước gây rắc rối. Máy chủ NFS thực sự là một bộ lưu trữ NetApp, tôi hầu như không biết gì về phần bên trong của nó.
touchnên làm việc. Bằng cách này, một cách di động hơn sẽ được touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp.
statlà không di động.
touchkhông làm việc. Đây có phải làmvbước haytouchbước thay đổi thời gian của các thư mục con? Hệ điều hành nào trên máy chủ NFS và (nếu bạn biết) loại hệ thống tập tin nào?