나는 쉘 명령을 사용하여 바이너리를 효율적으로 병합하고 싶었고 다음과 같은 고전적인 방법을 빨리 찾았습니다.
cat file1 file2 > file3
나쁘지는 않지만:
- 아주 느린. IO 액세스 속도가 느립니다.
- 추가 공간이 필요합니다. 파일을 복사하고 싶지 않습니다. 그냥 연결하세요.
파일 시스템은 파일 조각화를 처리하는 데 적합합니다. 이 메커니즘을 사용하여 파일을 병합할 수 없나요?
답변1
다음을 수행할 수 있습니다.
cat file2 file3 [...] filen >> file1
그러면 file2
, file3
,... 가 filen
in-place의 끝에 연결됩니다. file1
이 >>
연산자는 쉘에게 쓰라고 지시합니다.파일 끝.
"파일 조각화 처리"를 위해 파일 시스템을 활용하려고 합니다. 불행히도 이를 수행하는 보편적인 방법은 없습니다. 이는 "파일 시스템"이 디스크의 파일 시스템보다 더 일반적이기 때문입니다. 예를 들어 다음과 같습니다.네트워크 파일 시스템,퓨즈, 그리고 모든 종류의 리소스를 노출할 수 있는 기타 많은 메커니즘(단지블록 장치하드 디스크 등)을 파일 시스템 계층 구조로 사용합니다. 블록 장치 기반 파일 시스템의 경우에도 이를 수행하기 위한 표준 메커니즘이 없으며 구현별 메커니즘도 알지 못합니다.
답변2
list.txt
파일 이름을 "newline delimited"라는 텍스트 파일에 순서대로 입력합니다. 그런 다음 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