나는 파일에서 모든 항목을 제거하는 세 가지 방법을 알고 있습니다.
그들은
>filename
touch filename
1filename < /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
이나 모니터링 소프트웨어 등)을 실행할 때 파일을 다시 열 필요가 없다는 것입니다. 계속해서 파일 설명자를 사용하고 모든 새로운 데이터를 얻을 수 있습니다.