7일이 지난 로그를 삭제해야 하는 제거 논리를 작업 중입니다.
이제 두 가지 유형의 로그가 있습니다. 1) 개발자_로 시작하고 2) _c로 끝납니다.
내가 관심을 갖는 로그는 /NAS/logs
해당 경로의 다른 하위 폴더 이후가 아닌 그 이후에만 있습니다.
다음은 샘플 로그입니다.
/NAS/logs/.snapshot/Enterprise_Primary.2019-11-17_1300/developer_score_20191113.log
/NAS/logs/.snapshot/Enterprise_Primary.2019-11-17_1300/trdcvf_03_00_c.log.20191113163858
/NAS/logs/trddffgc004_00_c.log.20191118030038
/NAS/logs/developer_run_score.log.20191118030039
여기서는 이러한 로그에 액세스할 수 없으므로 숨겨진 폴더 .snapshot의 모든 로그를 제외하고 싶습니다.
아래 명령을 사용하여 해당 파일을 식별하려고 하는데 계속해서 .snapshot 파일도 제공됩니다.
-prune 옵션도 시도했지만 도움이 되지 않았습니다.
find /NAS/logs/ -mindepth 1 -type f \( -iname "*_c.log.*" -or -iname "developer_run_*" \) -not -path "./.snapshot/*"
최종 주문
find /NAS/logs/ -mindepth 1 -type f \( -iname "*_c.log.*" -or -iname "developer_run_*" \) -not -path "./.snapshot/*"-mtime +7 -delete
누구든지 조회에서 이 디렉터리를 제외하도록 도와줄 수 있나요?
답변1
지정한 두 번째 파일 이름 기준을 충족하는 샘플 파일이 없습니다. 일부 파일 _c
에는 _c
.포함하다find
다음과 같이 명령을 작성할 수 있습니다 .
find /NAS/logs -type d -path '/NAS/logs/.snapshot' -prune -o -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print
-o
이는 두 부분( (또는)조건) 으로 나눌 수 있습니다 .
- 트리 경로 일치는
/NAS/logs/.snapshot
삭제(정리)되며 추가 작업을 위해 고려되지 않습니다. - 7일 이상 전에 수정되었으며 이름이 일치하는 파일을 나열(인쇄)합니다
developer_*
.*_c*
일치하는 파일을 제거하려면 -print
로 바꾸 -delete
거나 간단히 추가 해야 합니다 .-delete
디렉터리 인스턴스를 정리하려면 .snapshot
다음과 같이 일치 조건의 첫 번째 부분을 수정하면 됩니다.
find /NAS/logs -type d -name '.snapshot' -prune -o ...
이제 문제에 추가 정보를 추가했으므로 더 이상 복잡하게 정리할 필요가 없습니다. 다음을 사용할 수 있습니다.
find /NAS/logs -maxdepth 1 -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print
(이는 질문에 단편적인 정보를 제공하는 것보다 완전한 정보를 제공하는 것의 중요성을 보여줍니다. 또는 전혀 제공하지 않는 것입니다.)
답변2
-prune 옵션도 시도했지만 도움이 되지 않았습니다.
무슨 일이야?
내 의견의 링크는 -깊이로 인해 -prune과 -delete를 함께 사용하는 데 문제가 있음을 보여줍니다.설명 찾기 및 다듬기
내 생각에 여기서는 다음과 같은 작업을 수행해야 합니다.
... -path '*/.snapshot/*' -o ... ... -delete
데이터(및 테스트)가 많은 경우에만 "-prune" 작업을 놓칠 수 있습니다.
find kernel -path '*/sched/*' -o -name '???.c' -exec grep -H 'struct ta' {} +
sys.c, pid.c 및 cpu.c에서 줄을 찾으세요.
없이는 kernel/sched/psi.c -o
에 -a
세 줄만 제공합니다.