나는에 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 소스 / 데이터 대상 /