수많은 파일이 포함된 디렉토리가 있습니다. 이 디렉터리를 복사하려고 하면 파일을 복사할 수 없다는(손상되었나요?) 메시지가 나타나고 복사가 중지됩니다.
해당 디렉토리 트리의 모든 파일을 확인하고 복사할 수 없거나 손상된 모든 파일을 나열하기 위해 터미널에 입력할 수 있는 명령이 있습니까? 지금은 파일을 복사하고 싶지 않습니다. 시도하면 파일을 복사/읽을 수 없는지 확인하기 위한 것입니다.
저는 OS X Mountain Lion을 사용하고 있지만 모든 UNIX 명령이 작동하길 원합니다.
감사해요.
참고: 손상은 읽거나 복사할 수 없는 파일을 의미합니다.
답변1
rsync
오류로 인해 종료가 발생하는 경우 종료 지점에서 복제를 다시 시작하는 기능을 사용하여 디렉터리를 복제하는 데 사용할 수 있습니다rsync
.rsync의
--dry-run
옵션을 사용하면 실제로 아무것도 복사하지 않고도 복사될 내용을 확인할 수 있습니다.--stats
옵션--progress
도 유용합니다. 또는 읽기가--human-readable
더-h
쉽습니다.예를 들어
rsync --dry-run -avh --stats --progress /path/to/src/ /path/to/destination/
Mac OS X에 rsync가 기본적으로 설치되어 있는지는 확실하지 않지만 Mac에서 사용해 본 적이 있어서 확실히 사용할 수 있다는 것을 알고 있습니다.
하위 디렉터리의 파일을 읽을 수 있는지 빠르게 확인하려면
grep -r XXX /path/to/directory/ > /dev/null
출력이 삭제되므로 검색 정규식은 중요하지 않습니다.STDOUT은 /dev/null로 리디렉션되므로 오류만 표시됩니다.
내가 여기를 선택한 유일한 이유 는 재귀 옵션
grep
때문입니다-r
. 이 외에도grep
와 함께 사용할 수 있는 다른 명령이 많이 있습니다find
.
답변2
을 사용하는 프로그램을 작성했습니다 grep
.
macOS가 및 옵션을 grep
지원하지 않으면 GNU 를 설치하세요.-a
-r
grep
스스로 만든:
brew install grep
내 findCorruptedFilesIn
기능:
findCorruptedFilesIn () {
local grep=$(which ggrep 2>/dev/null || which grep)
time $grep -a -r . "$@" > /dev/null
}
다음과 같이 사용할 수 있습니다.
$ findCorruptedFilesIn Videos/
/bin/grep: Videos/CHRIST/Joel_Osteen/Daily_Wisdom_TV/Positioning_Yourself_to_Prosper_TD_Jakes__18__sICQGp3iIfc__youtube_com.mp4: Input/output error
real 17m25.045s
user 0m0.654s
sys 1m46.749s