![대용량 파일을 덩어리로 나누고 원본 파일을 삭제하시겠습니까?](https://linux55.com/image/186288/%EB%8C%80%EC%9A%A9%EB%9F%89%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%8D%A9%EC%96%B4%EB%A6%AC%EB%A1%9C%20%EB%82%98%EB%88%84%EA%B3%A0%20%EC%9B%90%EB%B3%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
대용량 텍스트 파일(30GB)을 처리하는 데 문제가 있습니다.
더 작은 파일(예: 5GB)을 만들고 싶습니다.
하지만 안타깝게도 더 많은 저장 공간이 없습니다(최대 10G만 사용 가능).
이 줄은:
split -b 5g "file.txt" "file.txt."
원본 파일을 유지한다는 것은 결국 총 60GB의 파일을 갖게 된다는 것을 의미합니다. 이는 실제로 내 컴퓨터에 남아 있는 것보다 더 많은 공간입니다.
원본 파일을 유지하지 않고 동일한 기능으로 코드를 실행하려면 어떻게 해야 합니까?
답변1
오직~1.03G사용 가능한 디스크 공간,
분할 파일~9.3G의 크기.
이 파일을 10개의 작은 파일로 나눌 것입니다. 각 작은 파일은 약1G의 크기.
for i in {1..10}; do
tail -c 1G bigfile >split_file_$i && truncate -s -1G bigfile;
done
이것은 거의 사용1G사용 가능한 디스크 공간~1.03G가능하고 오직~30M갈때마다 항상 남는게 있어요! (저는 테스트 환경에 있습니다.) 물론 사용 가능한 여유 디스크 공간에 따라 분할 크기를 조정해야 합니다.사용 가능한 공간을 모두 사용하지 마십시오!, 예를 들어 최대 80%를 사용합니다.
파일에 다시 추가:
for file in split_file_{10..1}; do
cat "$file" >>bigfile_joined && rm "$file";
done