400 GiB 이상의 데이터가있는 디렉토리가 있습니다. 내가 생각하는 간단한 방법은이었다, 그래서 모든 파일이 오류없이 읽을 수 있는지 확인하고 싶었다 tar
로 /dev/null
. 그러나 대신 다음과 같은 동작이 나타납니다.
$ time tar cf /dev/null .
real 0m4.387s
user 0m3.462s
sys 0m0.185s
$ time tar cf - . > /dev/null
real 0m3.130s
user 0m3.091s
sys 0m0.035s
$ time tar cf - . | cat > /dev/null
^C
real 10m32.985s
user 0m1.942s
sys 0m33.764s
위의 세 번째 명령은 이미 오랫동안 실행 된 후 Ctrl+에 의해 강제로 중지되었습니다 C. 또한 처음 두 명령이 작동하는 동안 포함 된 저장 장치의 활동 표시기 .
는 거의 항상 유휴 상태였습니다. 세 번째 명령으로 표시등이 계속 켜져있어 매우 바쁩니다.
따라서 tar
출력 파일이임을 알 수있을 때 /dev/null
, 즉 /dev/null
파일 핸들을 tar
쓰기 위해 직접 열면 파일 본문이 건너 뛴 것처럼 보입니다. ( v
옵션을 추가 tar
하면 디렉토리에있는 모든 파일이 tar
'빨간색'으로 인쇄됩니다 .)
그래서 왜 이것이 그렇게 궁금합니까? 그것은 일종의 최적화입니까? 그렇다면 왜 tar
그런 특별한 경우에 대해 모호한 최적화를 원할까요?
Linux 4.14.105 amd64에서 glibc 2.27과 함께 GNU tar 1.26을 사용하고 있습니다.
pv
: tar -cf - | pv >/dev/null
. 문제를 회피하고 진행 정보 (다양한 pv
옵션)를 제공합니다
gtar -cf /dev/zero ...
원하는 것을 얻기 위해 사용하십시오 .
find . -type f -exec shasum -a256 -b '{}' +
. 그것은 않습니다뿐만 아니라 실제로 읽고 모든 데이터를 검사하지만 출력을 저장하는 경우, 당신은 파일의 내용이 변경되지 않았 음을 확인하기 위해 나중에 다시 실행할 수 있습니다.