파일 내용을 지우는 가장 효율적인 방법

파일 내용을 지우는 가장 효율적인 방법

나는 파일에서 모든 항목을 제거하는 세 가지 방법을 알고 있습니다.

그들은

  • >filename
  • touch filename1
  • filename < /dev/null

>filename세 가지 중에서 가장 적은 수의 키 입력이 필요하기 때문에 가장 많이 남용합니다 .

그러나 대용량 로그 파일과 작은 파일에 대해 이 세 가지 방법 중 어느 것이 가장 효율적인지(더 효율적인 방법이 있다면) 알고 싶습니다.

또한, 이 세 가지 코드는 어떻게 콘텐츠를 작동하고 삭제하나요?


1편집하다: 에서 논의한 바와 같이이 답변, 이는 실제로확실히파일을 삭제하세요!

답변1

실제로 두 번째 양식은 touch filename파일에서 아무것도 삭제하지 않습니다. 파일이 없으면 빈 파일을 생성하거나 기존 파일의 마지막 수정 날짜를 업데이트합니다.

세 번째는 filename을 입력으로 filename < /dev/null실행하려고 시도합니다 ./dev/null

cp /dev/null filename일하다.

효율성 측면에서 가장 효과적인 것은 다음과 같습니다 truncate -s 0 filename(참조여기).

그렇지 않으면 cp /dev/null filename> filename다 괜찮습니다. 둘 다 열 때 자르기 설정을 사용하여 파일을 열고 닫습니다. cp도 켜져 있으므로 /dev/null조금 느려질 것입니다.

반면에 truncate 명령을 실행하려면 시스템에서 실행 파일을 열고 로드한 다음 실행해야 하기 때문에 스크립트에서 실행하는 것보다 속도가 느릴 truncate수 있습니다 .> filename

답변2

다른 옵션은 다음과 같습니다.

echo -n > filename

매뉴얼 페이지에서 echo:

-n Do not print the trailing newline character.

답변3

sh, csh, bash 등에서 사용할 수 있는 내장 명령 ":"이 있는데, 이는 >파일을 자르기 위해 리디렉션 출력 연산자와 함께 쉽게 사용할 수 있습니다.

#!/usr/bin/env bash
:> filename

내가 좋아하는 점은 "echo" 등과 같은 외부 명령이 필요하지 않다는 것입니다.

파일을 삭제/재생성하는 대신 파일을 자르는 것의 가장 큰 장점 중 하나는 파일과 작동하는 응용 프로그램(예: 누군가가 만든 파일 tail -f filename이나 모니터링 소프트웨어 등)을 실행할 때 파일을 다시 열 필요가 없다는 것입니다. 계속해서 파일 설명자를 사용하고 모든 새로운 데이터를 얻을 수 있습니다.

관련 정보