
쉘 명령을 사용하여 효율적으로 바이너리 파일을 병합하고 싶은데 다음과 같은 고전적인 방법을 빨리 찾았습니다.
cat file1 file2 > file3
나쁘지는 않지만 :
- 느리다. IO 액세스가 느립니다.
- 추가 공간이 필요합니다. 파일을 복사하고 싶지 않습니다. 그냥 연결하세요.
파일 시스템은 파일 조각화를 처리하는 데 적합합니다. 이 메커니즘을 사용하여 파일을 병합할 수는 없나요?
답변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