디렉터리를 다른 드라이브로 이동할 때 오류가 발생하면 아무것도 삭제되지 않습니다. 이런 종류의 오류가 발생합니다.
mv: cannot stat ‘originaldirectory/longpath/irrelevantfile’: Input/output error
제 생각에는 mv
:
- 몇 번 다시 시도해 보세요(간단할 수도 있고 아무것도 해결되지 않을 수도 있음).
- 성공적으로 이동된 파일 삭제
이렇게 하면 문제가 있는 파일만 원본 폴더에 남게 됩니다.
답변1
이것보다 더 좋은 도구가 있습니다 mv
. 내가 가장 좋아하는 것 중 하나는 입니다 rsync
.
rsync --remove-source-files -avHP /path/to/source/ /path/to/destination/
--dry-run
허용되는 경우 플래그를 실제로 사용하기 전에 플래그를 사용해 보십시오 . 또는 플래그를 생략하면 이와 --remove-source-files
같이 작동하게 됩니다 .cp
mv
rsync
over의 장점은 mv
중단 가능하고 반복 가능하다는 것입니다. 따라서 오류로 인해 충돌이 발생하면 다시 시작하면 됩니다. 아니면 잠시 동안 루프에서 실행되도록 하세요.
for try in 1 2 3
do
rsync --remove-source-files -avHP /path/to/source/ /path/to/destination/ && break
echo -n 'Pausing...'
sleep 10 || break
echo
done
답변2
먼저 대상에서 소스의 디렉터리 트리를 다시 빌드합니다.
cd source
find -type d -exec mkdir -p destination/{} \;
{}
find
각 디렉터리의 상대 경로를 포함 해야 합니다 .
그런 다음 대상에 생성한 디렉터리 트리가 올바른지 확인하세요. 그리고 각 파일을 개별적으로 이동해 보세요.
cd source
find -type f -exec mv {} destination/{} \;
이것이 잠재적으로 얼마나 위험한지는 말할 수 없습니다. 데이터가 손실될 수 있습니다!파일을 생성할 수 없는 경우 find
어떻게 해야 할지 모르겠습니다. stat
내 희망은 메시지 오류가 발생하고 계속되는 것입니다. 그러나 손상된 미디어에서 데이터를 복구하려고 하는 것이 분명하므로 어떤 위험도 인지하고 있을 것입니다.
이것이 예상대로 작동하면 소스에 남은 것은 이동할 수 없는 디렉터리와 파일뿐입니다. 필요한 경우 빈 디렉터리를 재귀적으로 삭제하는 방법을 검색하여(이 질문이 이전에 요청된 적이 있다고 100% 확신합니다) 분석을 더 쉽게 만들 수 있습니다.
손상된 미디어에서 작은 테스트 사례를 만드는 것이 좋습니다. mkdir
일부 디렉토리, touch
임의의 파일 및 단계를 시도하고 무슨 일이 일어나는지 확인하십시오. 루트 디렉터리가 아닌 한 번에 하나의 디렉터리에서 이 작업을 수행하는 것도 좋은 생각일 수 있습니다.
예를 들어, 귀하의 구조가 다음과 같다면:
.
├── dir1
│ ├── fileA
│ └── subdir1
│ └── fileB
├── dir2
│ └── fileC
└── dir3
├── subdir1
│ └── fileD
└── subdir2
└── fileE
그런 다음 에서 한 번 3번 실행하고 모든 것이 순조롭게 진행 되면 모든 작업을 한 번에 수행하는 대신 , 및 dir1
로 이동합니다 .dir2
dir3
.