10

Как исключить все сообщения "permission denied" из команды "find"?

17

Я пытаюсь скрыть все сообщения об ошибках "permission denied" при выполнении команды:

find . > files_and_folders

Я экспериментирую с тем, в каких случаях появляются эти сообщения. Мне нужно собрать все папки и файлы, для которых такие сообщения не возникают.

Есть ли возможность записать уровни доступа в файл files_and_folders?

Как можно скрыть ошибки в то же время?

5 ответ(ов)

1

Если вы хотите начать поиск с корня "/", то скорее всего вы увидите вывод, похожий на:

find: /./proc/1731/fdinfo: Permission denied
find: /./proc/2032/task/2032/fd: Permission denied

Это происходит из-за отсутствия прав доступа. Чтобы решить эту проблему, вы можете:

  1. Использовать команду sudo:

    sudo find /. -name 'toBeSearched.file'
    

Эта команда запросит пароль суперпользователя. После ввода пароля вы увидите результаты поиска, которые вам нужны. Если у вас нет прав на использование команды sudo, вам следует обратиться к системному администратору с просьбой добавить вас в файл sudoers.

  1. Перенаправить стандартный поток ошибок (обычно выводимый на экран) в файл, чтобы избежать отображения сообщений об ошибках на экране! Можно перенаправить вывод в специальный файл /dev/null:

    find /. -name 'toBeSearched.file' 2>/dev/null
    
  2. Перенаправить стандартный поток ошибок в стандартный вывод (также на экран), а затем использовать команду grep с параметром -v, чтобы исключить строки, содержащие 'Permission denied':

    find /. -name 'toBeSearched.file' 2>&1 | grep -v 'Permission denied'
    
1

Для поиска программы expect мне пришлось использовать следующую команду:

find / -name expect 2>/dev/null

Я указал имя, которое хотел найти, и перенаправил все ошибки в /dev/null, чтобы не видеть лишних сообщений. В данном случае expect – это название программы, которую я искал.

0

Чтобы перенаправить стандартный поток ошибок (stderr) в /dev/null, вы можете использовать конструкцию 2>/dev/null. Это означает, что все сообщения об ошибках будут игнорироваться и не будут отображаться в терминале.

Например, команда, которая ищет файлы с указанным именем и отправляет ошибки в /dev/null, будет выглядеть так:

find . -name '...' 2>/dev/null

В этой команде find ищет файлы в текущем каталоге и его подкаталогах, и любое сообщение об ошибках (например, если у вас нет прав доступа к некоторым каталогам) будет перенаправлено в /dev/null, effectively игнорируя их.

0

Вы можете перенаправить стандартный поток ошибок в Bash на Unix-машине, используя следующий синтаксис. Например, чтобы перенаправить стандартный поток ошибок в /dev/null, вы можете использовать следующую команду:

find . 2>/dev/null >files_and_folders

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

0

Хотя вышеуказанные подходы не решают проблему для Mac OS X, так как эта система не поддерживает переключатель -readable, вот как вы можете избежать ошибок 'Permission denied' в своем выводе. Это может быть полезно кому-то.

Вы можете использовать следующую команду:

find / -type f -name "your_pattern" 2>/dev/null

Если вы используете другую команду с find, например, чтобы найти размер файлов с определенным шаблоном в каталоге, 2>/dev/null также будет работать, как показано ниже:

find . -type f -name "your_pattern" -exec du -ch {} + 2>/dev/null | grep total$

Эта команда вернет общий размер файлов, соответствующих заданному шаблону. Обратите внимание на 2>/dev/null в конце команды find.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь