Исключить пути, которые заставят find жаловаться на разрешения

Мне нужно создать список файлов из тома диска. Некоторые из каталогов (все скрытые каталоги в корневом каталоге) имеют странные разрешения, которые заставляют поиск жаловаться.

Я пытаюсь исключить все эти пути, но один каталог все еще жалуется:

find . -type f -not -path './.*/*' find: ./.DocumentRevisions-V100: Permission denied 

Права подобны (заданы операционной системой, поэтому я предполагаю, что их не следует путать).

 d--x--x--x root wheel .DocumentRevisions-V100 

Как изменить инструкцию find чтобы эффективно опустить все скрытые каталоги, чтобы не жаловаться. (Я не хочу делать 2>/dev/null поскольку я хочу знать о других проблемах).

3 Solutions collect form web for “Исключить пути, которые заставят find жаловаться на разрешения”

Синтаксис поиска – это странный зверь. Я думаю, что у вас может быть успех с

 find . -path './.*' -prune -o -type f -print 

на странице поиска (1) :

Чтобы игнорировать целое дерево каталогов, используйте -prune, а не проверяйте каждый файл в дереве. Например, чтобы пропустить каталог «src / emacs» и все файлы и каталоги под ним, а также распечатать имена других найденных файлов, выполните следующие действия:

 find . -path ./src/emacs -prune -o -print 

С помощью GNU find или любой другой находки, которая поддерживает предикаты -readable и -executable :

 find . -type d ! -readable ! -executable -prune -o -type f -not -path './.*/*' -print 

Сначала мы обрезаем каталоги, которые не пересекаются. Если это условие не применяется, попробуйте другое условие (условия).

Если ваш find не имеет этих параметров, вы можете сопоставлять его с правами доступа к файлам.

 find . -type d ! -perm -u+rx -prune -o -type f ! -path './.*/*' -print 
 u='-user "$USER"' g='\('$(IFS=\ ;printf " -group %d " $(id -G))'\)' eval "find / $u \( -perm -u=rx -o -prune \) -o \ $g \( -perm -g=rx -o -prune \) -o \ -perm -o=rx -o -prune" | wc -l 

Это работает. Поскольку разрешения на доступ к файлам всегда оцениваются на самом определенном уровне, вам не нужно -o r слишком много. Если файл принадлежит кому-либо и читается другими и группами, но не владельцем, то someuser все еще не может его прочитать. И поэтому вам просто нужно начинать с самого определенного соответствия прав и работать оттуда, -pruning все время.


 find: `/proc/3379/task/3379/fd/5': No such file or directory find: `/proc/3379/task/3379/fd/5': No such file or directory find: `/proc/3379/task/3379/fd/5': No such file or directory find: `/proc/3379/task/3379/fd/5': No such file or directory find: `/proc/3379/task/3379/fdinfo/5': No such file or directory find: `/proc/3379/task/3379/fdinfo/5': No such file or directory find: `/proc/3379/task/3379/fdinfo/5': No such file or directory find: `/proc/3379/task/3379/fdinfo/5': No such file or directory find: `/proc/3379/fd/5': No such file or directory find: `/proc/3379/fd/5': No such file or directory find: `/proc/3379/fd/5': No such file or directory find: `/proc/3379/fd/5': No such file or directory find: `/proc/3379/fdinfo/5': No such file or directory find: `/proc/3379/fdinfo/5': No such file or directory find: `/proc/3379/fdinfo/5': No such file or directory find: `/proc/3379/fdinfo/5': No such file or directory 327652 

Как вы можете видеть, ни в коем случае не возникает вопрос о разрешении, а иногда несколько раз возникают проблемы с /proc что неизбежно при нерестах файлов для чтения файлов.

  • Как вставить текст в файл root, используя sudo?
  • Как удалить упрямый каталог?
  • chmod рекурсивное разрешение на тысячи файлов
  • Почему Linux не разрешает разрешения сетевого порта пользовательского уровня?
  • сменяет разрешение на изменение каталога
  • Разница между chmod и ACL
  • VSFTPD, 553 Не удалось создать файл. - разрешения?
  • Определите, имеет ли текущий пользователь права на запись в каталоге
  • Sudo mkdir не удается из-за разрешения отклонить ошибку
  • Перенос с mplayer
  • Как рассчитываются разрешения для файлов?
  • Linux и Unix - лучшая ОС в мире.