분할 및 병합 – DVD를 사용하세요!

분할 및 병합 – DVD를 사용하세요!

이름이 큰 파일이 있다고 가정해 보겠습니다 foo.tar.xz. 나는 파일을 크기가 4.7GB 미만인 부분으로 분할하여 이름 등 split -b 4689887232 foo.tar.xz foo.tar.xz.의 파일을 제공했습니다 . 그런 다음 각 파일을 다른 DVD에 기록하고 상당히 큰 DVD를 사용하여 Alice에게 보냈습니다.foo.tar.xz.aafoo.tar.xz.ab귀환 비둘기.

이제 Alice는 각 DVD를 삽입하고 각 파일을 자신의 PC에 복사한 후 다음을 사용 cat하고 얻을 수 있습니다 .xzfoocat foo.tar.xz.* | tar xfJ -

이제 Alice가 자신의 PC에 추출된 콘텐츠를 저장할 만큼 충분한 공간이 있다고 가정합니다 foo. catDVD에서 이러한 파일을 직접 읽고 스트림을 일시 중지하여 다음 DVD를 삽입할 수 있는 방법이 있습니까 ? pausecat또는 와 유사합니까 volumecat?

답변1

이 맛은 잘 모르겠지만 cat해결 방법은 다음과 같습니다.거의일하다:

  1. 터미널에서 실행mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. 첫 번째 DVD를 DVD-ROM 드라이브(예: dev/sr0)에 넣습니다.
  3. 두 번째 터미널 실행dd if=/dev/sr0 of=myfifo
  4. 완료되면 ddDVD를 제거합니다.
  5. 다른 DVD가 있으면 DVD-ROM 드라이브에 넣고 3단계로 이동하고, 그렇지 않으면 6단계로 이동합니다.
  6. 첫 번째 터미널에서 CTRL-C를 눌러 종료 tail하고 tar.

어떻게 작동하나요?

비결은 tail명명된 파이프에서 연속 읽기를 사용하는 것입니다. 그러면 의 출력이 tail실행하려는 명령으로 파이프됩니다. 처음에는 파이프가 열리지 않으므로 아무 일도 일어나지 않습니다. 그러나 데이터를 파이프라인으로 펌핑하는 명령을 사용하기 시작하면 해당 dd데이터 tail가 선택되어 사용자에게 전달됩니다.

파이프로의 데이터 흐름이 중지되면 마법이 발생합니다. tail표준 출력 파일 설명자가 열린 상태로 유지되어 명령이 일시 중지됩니다. 그 동안에는 tail더 많은 입력을 기다리십시오.

질문

거의 작동한다고 말하는 이유는 tail입력된 데이터의 마지막 비트가 기록되지 않도록 막는 버퍼링 문제가 있는 것 같기 때문입니다. 누군가가 이 문제를 해결하는 데 통찰력을 제공할 수 있기를 바랍니다.

답변2

자신만의 catpause스크립트를 작성할 수 있습니다.

#!/bin/bash
while read -p 'ready ? ' >&2
do if [ y = "$REPLY" ]
   then cat /dev/dvd 
   fi
done |
tar xJf -

응답하라는 메시지가 표시되고 stderr, 그렇다면 y명령이 에서 읽는 파이프에 DVD를 복사합니다 tar. 완료되면 control-D를 입력하여 파일의 끝을 나타냅니다.

관련 정보