찾기 프로그램에서 "permission denied"인쇄물을 어떻게 제거합니까?


답변:


33

이러한 메시지는 stderr로 전송되며 일반적으로 해당 메시지 만 해당 출력 스트림에 표시됩니다. 명령 줄에서 닫거나 리디렉션 할 수 있습니다.

$ find / -name netcdf 2>&-

또는

$ find / -name netcdf 2>/dev/null

또한 루트 디렉토리 (/)를 검색하려는 경우 프로세스를 멋지게 만드는 것이 좋으므로 find가 모든 리소스를 소비하지는 않습니다.

$ nice find / -name netcdf 2>&-

이렇게하면 프로세스의 우선 순위가 낮아져 다른 프로세스가 CPU에서 더 많은 시간을 할애 할 수 있습니다. 물론 CPU를 사용하는 다른 장치가 없으면 아무것도하지 않습니다. :) 기술적으로, NI 값은에서 볼 ps -l때 PRI 값을 증가시킵니다. 낮은 PRI 값이 우선 순위가 높습니다. ps -l와 비교하십시오 nice ps -l.


1
나는 경고를 던지는 것을 좋아하지 않습니다. 그것들을 다루는 것이 훨씬 낫습니다. 또한 현장에서 탈출하지 마십시오.
Léo Léopold Hertz 준영

1
@ LéoLéopoldHertz 준영 WEll ... 만약 당신의 스크린이 에러로 가득 차서 프로그램 출력을 볼 수 없다면 .. 이런 경우입니다.
Chrips

20

@Gilles가 권한에 대해 불평하는 경로를 제외 하면이 답변을 지적하고 싶습니다-Unix & Linux Stack Exchange ; 그것은 기본적으로 find읽을 수없는 디렉토리를 내려 가지 않도록 하는 구조를 포함하며 , 그런 의미에서 아마도 더 빠릅니다.

이것은 나를 위해 작동하는 것 같습니다 :

GNU와 find또는 다른 find지지대 그 -readable-executable술어를 :

find / -type d ! \( -readable -executable \) -prune -o -type f -name netcdf -print

또는 이것 :

find / -type d ! -perm -g+r,u+r,o+r -prune -o -type f -name 'netcdf' -print

어떤 이유로 든, 나는 g+r,u+r,o+r(바로 가기 바로 가기)를 모두 추가해야합니다 a+r. 그렇지 않으면 그 중 하나가 빠지면 ​​여전히 "Permission Denied"적중이 발생할 수 있습니다.

여기에 내가 어떻게 보이는지에 대한 분석이 있습니다 ( -a(및) 연산자 find두 술어 사이내재되어 있습니다 ).

find /         # find starting from path /
  -type d        # match type is directory
  ! -perm -a+r   # (and) match not permissions of `r`ead present 
  -prune         # ignore what matched above and do not descend into it
  -o             # or (whatever didn't match above)
  -type f        # match type is file
  -name 'netcdf' # (and) match name is 'netcdf'
  -print         # print what matched above

마지막이 없으면 -print추가 항목이 표시됩니다 (와 관련이 없음 -name 'netcdf'). -print이름 만 일치가 인쇄 보장하지만 (있는 경우).


2
find(1)디렉토리로 내려갈 수 없다면 그렇게하지 않을 것입니다. 따라서 미리 확인할 수 있는지 확인하면 작업이 추가되고 (두 번 확인) 속도가 느려집니다.
vonbrand

3
@vonbrand find이 권한 오류로 인해 find0이 아닌 상태로 종료 되기 때문에의 종료 상태 에 의존하는 것이 필요합니다
Ernest A

제안한 제안서를받을 수 없습니다. 예상 출력이 가득 차면 출력이 없습니다. unix.stackexchange.com/q/290791/16920 그러나, 그렇지 않으면 귀하의 방법이 최선의 방법이라고 생각합니다.
Léo Léopold Hertz 준영

1
와우, 나는이 답변을 찾기가 너무 어렵다는 것을 믿을 수 없어, 나는 그것을 단순히 투표하는 것 이상을 할 수 있기를 바랍니다.
웨지

8

locate(1)대신 사용하십시오 :

$ locate netcdf

사용자가 볼 수있는 파일 만 표시됩니다.


1
이것은 updatedb정기적으로 실행되고 있다고 가정합니다 . 모든 Linux 시스템에서는 그렇지 않습니다.
Arcege

3
locate (1)가 설치되면 데이터베이스 정기적으로 업데이트 해야 합니다. 그 일이 일어나지 않으면 locate (1)의 결함이 아닌 잘못된 구성으로 분류합니다. 또한 마지막 DB 업데이트 이후에 추가 된 파일을 찾는 드문 경우에 수동으로 실행하는 데 몇 분 밖에 걸리지 않습니다. 나는 일년에 수십 번 정도 그렇게하는 것을 알았습니다. find (1)보다 find (1)의 속도 이점으로 인해 쉽게 오버 헤드가 지불되었습니다.
워렌 영
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.