찾기 및 삭제에서 숨겨진 디렉터리 제외

찾기 및 삭제에서 숨겨진 디렉터리 제외

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이는 두 부분( (또는)조건) 으로 나눌 수 있습니다 .

  1. 트리 경로 일치는 /NAS/logs/.snapshot삭제(정리)되며 추가 작업을 위해 고려되지 않습니다.
  2. 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세 줄만 제공합니다.

관련 정보