find 명령을 사용하여 검색에서 proc 및 sys 폴더를 어떻게 제외할 수 있습니까?

find 명령을 사용하여 검색에서 proc 및 sys 폴더를 어떻게 제외할 수 있습니까?

임의의 디렉터리 경로를 선택하는 스크립트를 실행하고 싶습니다.

find / -type d | shuf -n1 

안타깝게도 특정 디렉터리가 차단되었다는 오류 메시지가 나타납니다.

find를 사용하여 검색에서 디렉토리를 제외하는 방법은 무엇입니까?

답변1

특정 경로를 제외하려면 Linux에서 다음을 수행하십시오.

find / -path /sys -prune -o -path /proc -prune -o -type d

또 다른 방법은 find다른 파일 시스템에서 반복되지 않도록 지시하는 것입니다.

find / -xdev -type d

당신은 또한 사용할 수 있습니다위치updatedb라이브 시스템 대신 파일 이름 데이터베이스(일반적으로 밤마다 업데이트되며 수동 업데이트를 사용할 수도 있음)를 쿼리합니다 .

locate '*' | shuf -n 1

답변2

GNU find를 사용하면 정규식 옵션을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d

답변3

한 가지 방법은 단지포함하다실제 파일 시스템.

실제 파일 시스템의 모든 마운트 지점을 식별하고 한 줄에 입력합니다.

$ realfs=$(df -x tmpfs -x devtmpfs | tail -n +2 | awk '{print $6;}' | xargs)
$ echo $realfs
/ /home /dos /Data 

find이러한 마운트 지점에 대해서만 실행하십시오.

$ find ${realfs} -type d |& grep -v "Permission denied" | shuf -n1
/Data/share/source/pan2/.git/refs/tags

( |&4.x에 bashism이 추가되었습니다. 4.4에서 작동합니다.)

관련 정보