find 명령에서 정리 사용이 작동하지 않습니다.

find 명령에서 정리 사용이 작동하지 않습니다.

트림을 다음과 같이 사용하려고합니다.

find /opt/app/bss/sieb/fs_clone1/userpref -name "*" -type f -mtime -7 -prune

아직 하위 디렉터리를 검색하는 중입니다.

답변1

하위 디렉터리를 검색 하지 않았기 때문에 여전히 -prun하위 디렉터리를 검색하고 있습니다.

-prune트리 의 경우 find먼저 일치해야 합니다.

find / -type d ! -path / -prune -print

/boot
/home
/mnt
/opt
/esp
/dev
/proc
/root
/run
/srv
/sys
/tmp
/usr
/var
/etc

-path /그렇지 않으면 발견된 첫 번째 디렉토리가 /루트 디렉토리가 되고그것-prune그런 다음 -print편집이 이루어집니다.

하지만 보시다시피 그렇습니다일치d 파일이 -prune전부입니다. 그래서 당신이성냥 -type f트리가 전혀 없습니다 -prune. 일반 파일에는 하위 디렉터리가 없습니다.

아마도 다음과 같은 것을 원할 것입니다.

find /opt/app/bss/sieb/fs_clone1/userpref \
     -path \*path/to/ignore -prune -o     \
   ! -type d -mtime -7

이것은 당신이 말한 것과 매우 다릅니다. 먼저 -path path/to/ignore작동하지 않습니다. 그것은 일치해야합니다모두경로로 시작하고 시작 트리는 시작 /하지만 path/to/ignore전혀 그렇지 않습니다. 그래서 나는 *globstar를 넣었지만 더 나은 - 아마도 더 간결하게는 다음과 같을 수 있습니다:

cd /opt/app/bss/sieb/fs_clone1/userpref &&
find . -path ./path/to/ignore -prune -o  \
     ! -type d -mtime 7

...이렇게 하면 출력이 덜 복잡해집니다. 그러나 어느 쪽이든 해당 패턴과 일치하는 모든 경로 는 'd -path됩니다 .-prune아니요다른 문으로 이동했기 때문에 인쇄되었으며 자동으로 인쇄되는 전체 스크립트의 마지막 표현식 -o일 뿐입니다 .find

그러나 마지막 부분도 다르다. -name '*'이름이 모두 일치하므로 필터링 '*'하지 않는 것이 좋습니다. 나는 이것이 ! -type d많은 사람들이 말할 때 의미하는 바라고 생각합니다 -type f. 전자는 fifo, 소켓 및 기타 이상한 파일 형식을 포함하여 디렉터리가 아닌 모든 파일 형식과 일치합니다. 후자는 일반 파일에만 일치합니다. 아마도 당신은 후자를 원할 것입니다. 하지만 저는 단지 그것을 언급하고 싶었을 뿐입니다.

어쨌든, 모든 것이 결정되고 완료되면 *path/to/ignore다른 모든 것이 일치하고 잘리고 인쇄되지 않습니다. 이 파일은 디렉토리 유형이 아니며 7일 전에 수정되었습니다.

답변2

find /opt/app/bss/sieb/fs_clone1/userpref -type f -mtime -7 -path path/to/ignore -prune -o -print

하지만 내 생각엔 당신에게 필요한 것은 -depth.

이는 −maxdepth 0명령줄 인수에만 테스트와 작업을 적용한다는 의미입니다. −mindepth 1명령줄 매개변수를 제외한 모든 파일이 처리됨을 나타냅니다.

관련 정보