Intereting Posts
Являются ли контейнеры и гипервизоры альтернативой многоуровневым дистрибутивам на основе графического интерфейса? извлекать блоки текста из XML-файла Заменить "/ U + {4} /" с надлежащим символом Юникода в конвейере оболочки с флагом sed eval Как запустить собственный «pacman» на смонтированном изображении? <и << в UNIX / Linux используйте find и grep, чтобы найти строки, содержащие некоторую строку и не содержащие другую строку из файлов Проблема с беспроводным интерфейсом Broadcom 4360 PCI-ID 14e4: 43a0 Легкая сборка linux Не удалось установить драйвер LAN в RedHat (*** /lib/modules/2.6.32-358.el6.i686/build: нет такого файла или каталога)? Как расшифровать файл во временный и прочитать без сохранения? Невозможно установить имя хоста для использования в сети Почему на выходе «echo 123> (cat)» есть «/ dev / fd / 63»? Are & and; унарные или двоичные операторы? Как совместить строку с regexp и условно делать вещи с группами захвата Если вы ^ Z из процесса, он становится «остановлен». Как вы снова включаетесь?

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

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

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

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

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

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

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

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

 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 что неизбежно при нерестах файлов для чтения файлов.