리눅스에서 mtime을 유지하는 폴더를 mv로 만드는 방법은 무엇입니까? source/data NFS 공유에 1TB가 넘는 데이터가 있으면

나는에 CentOS 5.5를 사용하고 있습니다 및 폴더의 큰 금액을 이동하고자하는 하나의 볼륨 내에서 자신을 유지, mtime.

내가 찾을 수있는 가장 좋은 해결책은 다음과 같습니다.

cp -p -r source/data target/
rm -rf source/data

NFS 공유에 1TB가 넘는 데이터가 있으면 복사하는 데 시간이 오래 걸립니다. 복사하고 싶지 않습니다. 나는 즉각적인 움직임을 원합니다.

내가 사용하여 폴더를 이동할 때 mv source/data target/mtime폴더 (안 파일)은 현재 시간으로 설정됩니다. 이동중인 폴더의 내용이이 작업으로 수정되기 때문입니다 ( ..항목이 다른 inode를 가리키고 있음).

나는 다음과 같은 쉘 스크립트를 생각해 냈다 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

글쎄, 그건 작동하지 않았다. 폴더 mtime가 복원되지만 내가 이동하는 폴더 내의 모든 폴더 (1 레벨 깊이의 폴더 만)는 mtime이해할 수없는 이유로 재설정됩니다.

누구나 적절하고 효율적이며 올바른 솔루션을 가지고 있습니까?



답변

POSIX mv는 atime / mtime 보존을 요구하는 옵션을 제공하지 않지만, 작업이 동일한 볼륨에 국한되어 있으므로 cp다음 -l옵션을 사용하여 일반 파일의 데이터를 복사하는 대신 하드 링크를 사용 하도록 요청할 수 있습니다 .

cp -p -r -l source/date target/
rm -rf source/data

디렉토리와 파일 참조 만 실제로 복사되므로 훨씬 빠릅니다.

하드 링크에 대한 자세한 내용은 해당 Wikipedia 페이지를 참조하십시오.

서브 디렉토리 mtime이 현재 솔루션으로 재설정되는 이유는 상위 디렉토리 mtime 만 가져오고 복원하기 때문입니다. touch는 재귀 명령이 아닙니다.


답변

다른 해결책은 다음과 같습니다.

rsync -a –remove-source-files 소스 / 데이터 대상 /


답변