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/
, mtime
thư 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?
mv
bướ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ó.
touch
nê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
.
stat
là không di động.
touch
không làm việc. Đây có phải làmv
bước haytouch
bướ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?