파일 내용 비우기 항목을 삭제하는 세 가지 방법을

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

그들은

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

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

그러나 큰 로그 파일과 작은 파일과 관련하여 세 가지 중 더 효율적인 방법 (더 효율적인 방법이있는 경우)을 알고 싶습니다.

또한 세 코드는 어떻게 작동하고 내용을 삭제합니까?



답변

실제로 두 번째 형식 touch filename은 파일에서 아무것도 삭제하지 않습니다. 비어있는 파일이 존재하지 않는 경우에만 파일을 만들거나 기존 파일의 마지막 수정 날짜를 업데이트합니다.

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

cp /dev/null filename 공장.

효율적인면에서 가장 효율적인 방법은 다음과 같습니다 truncate -s 0 filename. 여기 참조 : http://linux.die.net/man/1/truncate를 .

그렇지 않으면, cp /dev/null filename또는 > filename둘 다 괜찮습니다. 절단시 열림 설정을 사용하여 파일을 열고 닫습니다. cp또한 열어서 /dev/null조금 느리게 만듭니다.

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


답변

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

echo -n > filename

의 맨 페이지에서 echo:

-n Do not print the trailing newline character.


답변

sh, csh, bash 및 기타 명령에서 사용할 수있는 내장 명령 “:”이 있으며 경로 재 지정 출력 연산자 >로 파일을 자르는 데 쉽게 사용할 수 있습니다 .

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

내가 좋아하는 것은 “echo”와 같은 외부 명령이 필요하지 않다는 것입니다.

파일을 삭제 / 재 작성하는 대신 파일을 자르면 얻을 수있는 큰 이점 중 하나는이 파일과 함께 작동하는 응용 프로그램 (예 : 누군가가 tail -f filename모니터링 소프트웨어를 만드는 등 )을 다시 열 필요가 없다는 것입니다. 그들은 단지 파일 기술자를 계속 사용할 수 있으며 모든 새로운 데이터를 얻습니다.