Я просто хотел бы указать на этот ответ @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
), в противном случае, если один из них пропущен, я все равно могу получить «Отказано в доступе».
Вот расстройство того , как я вижу (обратите внимание на -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
гарантирует , что печатаются только имя спички (если таковые имеются).