파일 시스템을 처리하여 복사 작업 없이 바이너리 파일을 병합할 수 있나요?

파일 시스템을 처리하여 복사 작업 없이 바이너리 파일을 병합할 수 있나요?

쉘 명령을 사용하여 효율적으로 바이너리 파일을 병합하고 싶은데 다음과 같은 고전적인 방법을 빨리 찾았습니다.

cat file1 file2 > file3

나쁘지는 않지만 :

  1. 느리다. IO 액세스가 느립니다.
  2. 추가 공간이 필요합니다. 파일을 복사하고 싶지 않습니다. 그냥 연결하세요.

파일 시스템은 파일 조각화를 처리하는 데 적합합니다. 이 메커니즘을 사용하여 파일을 병합할 수는 없나요?

답변1

다음을 수행할 수 있습니다.

cat file2 file3 [...] filen >> file1

그러면 file2, file3,... 가 in-place filen의 끝까지 연결됩니다. file1연산자 >>는 쉘에게 다음 항목에 쓰라고 지시합니다.파일의 끝.

파일 시스템을 활용하여 "파일 조각화 처리"를 원합니다. 불행히도 이를 수행하는 일반적인 방법은 없습니다. 이는 "파일 시스템"이 디스크의 파일 시스템보다 훨씬 더 일반적이기 때문입니다. 예를 들어 다음과 같습니다.NFS,퓨즈및 모든 종류의 리소스를 노출할 수 있는 기타 많은 메커니즘(단지블록 장치하드 디스크 등)을 파일 시스템 계층 구조로 사용합니다. 블록 장치 기반 파일 시스템의 경우에도 이를 수행하는 표준 메커니즘이 없으며 구현 관련 메커니즘도 모릅니다.

답변2

list.txt새 줄로 구분된 텍스트 파일에 파일 이름을 순서대로 입력하세요 . 그런 다음 bash에서 이것을 실행하십시오.

while read line; do echo -n . ; dd if="$line" of=out status=none conv=notrunc oflag=append; done < list.txt

그러면 현재 디렉터리에 연결된 파일 'out'이 생성됩니다.

답변3

    dd if=firstfile.raw > completedfile.raw
    dd if=nfile.raw    >> completedfile.raw
    dd if=lastfile.raw >> completedfile.raw

관련 정보