find $LOG_PATH -type f -mtime +60 -print -exec rm {} \;
위 명령은 로그 파일을 삭제합니다. 각 명령에 대한 설명서를 읽었지만 잘 이해가 되지 않습니다.
이것을 간단한 설명으로 설명할 수 있는 사람이 있나요?
감사해요!
답변1
명령을 이해하기 위해 먼저 매뉴얼을 읽어주셔서 감사합니다. 명령의 각 부분을 참조하여 명령이 어떻게 작동하는지 설명하려고 합니다.매뉴얼은 여기에 있습니다.
이 명령은 주로 다음 작업을 수행합니다. 1) $LOG_PATH 변수에 지정된 경로 내에서 60일 전에 수정된 일반 파일을 검색합니다. 2) 각각의 유효한 결과에 대해 파일 이름을 인쇄한 다음 rm
파일에 대한 명령을 실행합니다.
자세한 내역은 다음과 같습니다. find 명령의 기본 구문은 다음과 같습니다(명확성을 위해 일부 고급 옵션은 생략되었습니다).
find [starting-point...] [expression]
시작점은 /home 또는 document/와 같은 경로입니다. 설명서에는 다음과 같이 나와 있습니다.
GNU find는 주어진 표현식을 왼쪽에서 오른쪽으로 평가하여 우선순위 규칙에 따라 주어진 각 시작점에 루트가 있는 디렉토리 트리를 검색합니다.
귀하의 경우 시작점은 $LOG_PATH 변수로 지정됩니다. 이 변수에는 유효한 경로 값이 포함되어야 합니다.
이제 find는 파일을 찾을 위치를 알았으므로 다음 단계는 주어진 표현식을 평가하는 것입니다. 다시 매뉴얼로 돌아가서:
시작점 목록 뒤의 명령줄 부분이 표현식입니다. 이는 파일을 일치시키는 방법과 일치된 파일을 처리하는 방법을 설명하는 쿼리 사양입니다.
단순화를 위해 명령에 나타나는 두 가지 유형의 표현식인 테스트와 작업을 고려해 보겠습니다.
테스트는 일반적으로 고려 중인 파일의 일부 속성을 기반으로 참 또는 거짓 값을 반환합니다.
작업에는 부작용(예: 표준 출력에 무언가 인쇄)이 있으며 일반적으로 성공 여부에 따라 true 또는 false를 반환합니다.
이 경우 테스트는 -type f
합계 -mtime +60
표현식입니다. 이 -type
테스트는 파일이 특정 유형인지 확인합니다. -type f
해당 파일이 일반 파일인지 확인하세요. 다른 변형에는 -type d
디렉토리 확인 및 -type l
기호 링크 찾기가 포함됩니다.
테스트가 -mtime +60
좀 복잡해요. 파일의 데이터/내용이 수정된 지 60일이 지났는지 확인합니다. 여기에는 복잡한 문제가 있습니다. find
수정 시간을 계산하는 데 관련된 부분을 무시하세요. 따라서 이 테스트를 성공적으로 통과하려면 실제로 파일을 61*24시간 전에 수정해야 합니다. 시간은 달력 날짜가 아닌 명령이 실행된 시간부터 계산됩니다.
명령의 다음 표현식 find
은 작업입니다: -print
. 이 작업을 통해 -print
통과하고 테스트한 각 파일의 파일 이름이 표준 출력(한 줄에 하나의 파일)으로 인쇄됩니다. 이는 기본적으로 지정된 테스트 기준을 통과하는 파일 목록이라는 결과를 제공합니다.-type
-mtime
find
명령의 마지막 부분 find
도 작업입니다: -exec
. 이 -exec
작업은 각 결과에 대해 지정된 명령을 실행합니다 find
. 귀하의 경우 이것은 rm
파일을 삭제하는 명령입니다. 중괄호( {}
)는 파일 이름을 대체할 위치를 지정합니다. 그러면 다음 형식의 명령이 생성됩니다 rm /path/to/target/file
. 후행 세미콜론은 -exec
지정된 명령이 일치하는 각 파일에 대해 한 번 실행되어야 함을 지정합니다. 세미콜론도 셸의 특수 문자이므로 앞에 백슬래시를 추가하면 이스케이프할 수 있습니다.
답변2
$LOG_PATH
검색할 경로가 포함될 수 있는 변수입니다(예: /home/folder1/folder2`).
-type f
: 폴더나 기타 파일은 검색하지 않고 파일만 검색
-mtime
: 마지막으로 수정된 지 60일이 넘었습니다.
-print
: 이 명령의 출력을 인쇄합니다. 명시적으로 지정하지 않은 경우 기본값을 사용해야 합니다.
-exec rm {} \;
: 결과의 각 줄에서 명령을 실행합니다. 개행으로 구분됩니다(실제로는 명령으로 찾은 각 파일에서). \;
이는 해당 파일을 삭제하는 데 필요합니다.