MV를 계속하기 위한 모범 사례

MV를 계속하기 위한 모범 사례

터미널을 사용하여 한 드라이브에서 다른 드라이브로 파일을 복사합니다.

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; ) )

target 디렉토리나 source_directory라는 이름이 경로의 일부인 경우 잘못되기 쉽고, 중복으로 표시되어 이동되지 않은 파일을 삭제하면 됩니다. 또한 소스 디렉터리가 없게 됩니다.

중단된 MV를 복구하는 방법에 대한 모범 사례가 있습니까?

답변1

rsync를 재발명하려는 시도를 잊어버리고 대신 rsync를 사용하십시오.

sudo rsync -av /location/to/drive1/ /location/to/drive2/

소스 파일에서 후행 슬래시를 사용해야 합니다. 그렇지 않으면 /location/to/drive2/drive1.

명령을 실행하기 전에 명령이 성공했는지 다시 확인하십시오 rm -rf /location/to/drive1/.

위의 명령은 을 덮어쓰게 됩니다 . 예를 들어 drive2에 이미 존재하는 파일을 건너뛰도록 사용자에게 메시지를 표시하려는 경우 이제 복사된 파일과 아직 복사되지 않은 파일을 구별해야 하기 때문에 더 복잡해집니다. 이 옵션을 rsync에 전달하여 내용에 관계없이 대상에 이미 존재하는 파일을 건너뛸 수 있습니다 . 파일 생성 중에 원본 파일이 중단되면 파일은 반 복사된 상태로 유지됩니다(반면 베어 파일은 복사를 올바르게 완료함).drive2mv -i--ignore-existingmvrsync -a

프롬프트를 포함하여 정확한 동작을 재현하려는 경우 mv -i그렇게 할 수 있지만 훨씬 더 복잡합니다.

유니콘의 안감은 매우 약하다는 점에 유의하세요. 파일 이름에 백슬래시나 개행 문자가 포함되어 있으면 올바르게 복사되지 않을 수 있으며 심지어 스크립트를 속여 임의의 파일을 삭제하도록 할 수도 있습니다. 그래서질문에 코드를 사용하지 마세요파일 이름에 백슬래시나 개행 문자가 포함되어 있지 않다는 것을 확신할 수 없다면.

나중에 참고할 수 있도록 대규모 크로스 드라이브 이동에는 절대 사용하지 않는 것이 좋습니다. mv중단되면 어떻게 되는지 제어하기 어렵기 때문입니다. rsync를 사용하여 원본 파일을 복사한 다음 삭제하세요.

관련 정보