공간 오버헤드 없이 파일을 병합하는 유닉스 유틸리티(cat *.txt > merged.txt; rm *.txt를 한 단계로)

공간 오버헤드 없이 파일을 병합하는 유닉스 유틸리티(cat *.txt > merged.txt; rm *.txt를 한 단계로)

파일을 한 줄씩 표준 출력으로 덤프하고 해당 줄을 삭제할 수 있는 유틸리티가 있습니까?

cat물론 전달하고 싶은 대용량 파일이 많이 있습니다 .

cat *.txt > merged.txt 

하지만 이렇게 하면 파일이 원래 차지했던 공간의 두 배를 차지하게 됩니다 txt. cat이렇게 삭제한 후

cat *.txt > merged.txt && rm -rf *.txt

2배의 공간이 필요하면서도 스토리지 요구 사항 감소

원본 파일에서 줄을 삭제하는 동안 줄을 표준 출력으로 스트리밍하는 명령을 찾고 있습니다.

<some command> *.txt > merged.txt

이런 식으로 *.txt+ merged.txt가 사용하는 총 공간은 *.txt처음에 필요한 공간을 초과하지 않습니다.

답변1

한 줄씩 정리하는 것이 약간 까다롭게 들리지만, 파일별로 수행하는 것을 허용하면(저장 용량이 모든 *.txt파일 + 그 중 하나를 초과하지 않도록):

find -name "*.txt" -exec cat {} >> result.txt \; -exec \rm -f {} \;

특히 조심하세요! find 명령을 실행하기 전에 항상 결과를 확인하십시오. 그렇지 않으면 rm삭제해서는 안 되는 항목을 빛의 속도로 삭제하게 됩니다.

관련 정보