터미널을 사용하여 한 드라이브에서 다른 드라이브로 파일을 복사했습니다.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
그러나 디렉토리를 만든 후 몇 시간 동안 오류없이 갑자기 중단되었습니다.
그것에 대한 내 자신의 솔루션은 종종 해싱과 비교의 혼합입니다. 이제 어떤 파일이 누락되었는지 (zsh를 위해 매우 긴 하나의 라이너로 작성 됨) 알지 못하고 중간 복사본에서 복구해야하기 때문에 대부분 시간이 많이 걸리는 혼란입니다. 이 스크립트는 작성된대로 bash에서 작동하지 않습니다)
source_directory="/path/to/source_directory/";
target_directory="/path/to/target_directory/";
while read hash_and_file; do {
echo "${hash_and_file}" | read hash file;
echo "${file}" | sed "s/^/${source_directory}/g" | read copy_from;
echo "${copy_from}" | sed "s/${source_directory}/${target_directory}/g" | read copy_to;
mv -v "${copy_from}" "${copy_to}" | tee -a log;
rm -v "${copy_from}" | tee -a log; };
done <<<$(
comm -23 <( find ${source_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${source_directory}: :g" | sort;
) <( find ${target_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${target_directory}: :g" | sort; ) )
이름 대상 디렉토리 또는 source_directory가 경로의 일부인 경우 오류가 발생하기 쉬우 며 파일이 중복으로 표시되어 이동되지 않은 경우 파일을 삭제하십시오. 또한 결국 디렉토리를 소스하지 않습니다.
중단 된 mv에서 복구하는 가장 좋은 방법이 있습니까?
--delete-during receiver deletes during the transfer
과 같은 유용한 대안을 제공합니다 --delete --delete-before --delete-delay --delete-after --delete-excluded
. 따라서 rsync가 최선의 대안입니다
mv
명령을 반복하지 않는가 ? 아마로 *
원본 소스가 디렉토리 인 경우 소스 경로에 추가.
rsync --delete*
것 재해 ! dest
현재에 있지 않은 것을 제거 src
하므로 이전 시도에서 성공적으로 이동 한 모든 파일이 이제 삭제됩니다! 당신은 아마 rsync --remove-source-files
내가 동의 하는 것이 좋은 대안 이 될 것이라고 생각하고 있었을 것입니다 . ( more1 , more2 )
rsync --delete
것입니다 만 제거 다른 소스의 일부가 아닌 파일을. [man rsync] () *에서 불필요한 디렉토리에서 불필요한 파일을 삭제합니다 *. 불필요한 의미 이해 : 동기화되지 않음. 그리고 rsync 는 소스 파일이 올바르게 전송 된 후 소스 파일을 제거하는 방법 도 제공합니다.
cmp
. 의존성이 있으며while read
Gilles가 언급 한 것과 동일한 문제가 있습니다. 또한 느리고 장황합니다. 그러나 파일이 실행될 때 소스에서 (재) 이동되기 때문에 rsync 방법보다 빠른 디스크 공간을 확보합니다. 용감한 사람들에게 영감을 줄 수 있습니다.