디렉터리의 모든 로그 파일 지우기

디렉터리의 모든 로그 파일 지우기

최근에 접한이 페이지파일을 비우는 방법을 나타냅니다. 특정 하위 폴더의 모든 파일에 대해 이 작업을 수행하려면 어떻게 해야 합니까?

예를 들어, > file.log다음을 사용하여 파일을 지우려면?

기본적으로 가상 머신 인스턴스 이미지를 생성하고 템플릿을 사용할 때 남은 데이터 없이 재부팅되도록 기존 로그 파일을 지우고 싶습니다.

답변1

그리고

for i in /var/log/*; do
    > "$i"
done

디렉터리에 대한 오류 메시지를 방지하려면 테스트를 포함하세요.

for i in /var/log/*; do
    test -f "$i" && > "$i"
done

답변2

단일 명령의 또 다른 옵션은 다음과 같습니다.truncate:

truncate -s /var/log/*

그러나 위 코드는 /var/log의 모든 하위 디렉터리에 대해 오류를 발생시킵니다.

잘림: 쓰기 위해 '/var/log/subdir'을 열 수 없습니다. 디렉터리입니다.

...stderr를 제거하여 무음으로 설정할 수 있습니다.

truncate -s /var/log/* 2>/dev/null

파일이나 디렉토리가 없으면 현재 nullglob쉘 옵션에 주의해야 합니다. 기본적으로는 꺼져 있습니다:

$ shopt nullglob
nullglob        off

...이렇게 하면 *콘텐츠가 확장되지 않은 상태로 유지되므로 truncate이라는 파일이 생성됩니다 *. 다음 두 가지 방법으로 이를 방지할 수 있습니다.

  1. shopt -s nullglobnullglob 설정: 실행하기 전에 truncate. 그런 다음 (stderr을 삭제하지 않으면) 오류가 표시됩니다.

    잘림: 파일 피연산자 누락

  2. truncate누락된 파일을 생성하지 않도록 지시합니다 .truncate --no-create -s 0 /var/log/*

관련 정보