Почему не удается перенаправить стандартный вывод команды tee в / dev / null

Таким образом я делаю отпечатки пальцев для всех файлов в /var/www/html.

find /var/www/html  -type  f |xargs md5sum | tee /opt/figerprint.db.ori  

Работает нормально.

Теперь я хочу перенаправить весь стандартный вывод команды tee в / dev / null.

find /var/www/html  -type  f |xargs md5sum | tee /opt/figerprint.db.ori  1>/dev/null

md5sum: /var/www/html/news/uploads/Red: No such file or directory
md5sum: Hat: No such file or directory
md5sum: Enterprise: No such file or directory
md5sum: Linux: No such file or directory
md5sum: 6.txt: No such file or directory

Я обнаружил, что имя файла не может быть правильно проанализировано.

ls /var/www/html/news/uploads/Red*
/var/www/html/news/uploads/Red Hat Enterprise Linux 6.txt

Как исправить мою команду для правильного перенаправления stdout в / dev / null?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 229
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуйте сделать это вместо этого:

find /var/www/html -type  f | xargs -i md5sum | tee /opt/figerprint.db.ori  1>/dev/null

Из руководства xargs:

-I replace-str

Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.

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

Причина ошибки в том, что вы передаете md5sum имена файлов без кавычек. Обычный обходной путь с GNU find - использовать терминаторы нулевого байта вместо символов новой строки:

find /var/www/html -type f -print0 | 
xargs -0 md5sum |
tee /opt/figerprint.db.ori >/dev/null

Конечно, tee ничего не нужно, если отказаться от стандартного вывода.

find /var/www/html -type  f -print0 | 
xargs -0 md5sum >/opt/figerprint.db.ori

Обычным дополнением является xargs -r, чтобы предотвратить запуск md5sum, если find не находит никаких файлов.

Сообщение об ошибке предполагает, что у вас, вероятно, не есть GNU find. Другой способ сделать то же самое -

find /var/www/html -type f -exec md5sum {} + >/opt/figerprint.db.ori

Если ваш find действительно старый и не поддерживает -exec ... +, вам необходимо переключиться на

find /var/www/html -type f -exec md5sum {} \; >/opt/figerprint.db.ori

что, однако, будет довольно неэффективным, поскольку создает один процесс для каждого найденного файла.

Почему find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori не может отображать информацию об ошибке?

find /var/www/html  -type  f |xargs md5sum
md5sum: /var/www/html/news/uploads/Red: No such file or directory
md5sum: Hat: No such file or directory
md5sum: Enterprise: No such file or directory
md5sum: Linux: No such file or directory
md5sum: 6.txt: No such file or directory

tee будет показывать на экране как stdout, так и stderr, но по умолчанию будет записывать только информацию stdout.

find /var/www/html  -type  f |xargs md5sum | tee /opt/figerprint.db.ori

Я просматриваю вывод вышеуказанной команды на экране,

md5sum: /var/www/html/news/uploads/Red: No such file or directory
md5sum: Hat: No such file or directory
md5sum: Enterprise: No such file or directory
md5sum: Linux: No such file or directory
md5sum: 6.txt: No such file or directory

Вышеупомянутые строки (назовем это информацией об ошибке) были окружены многими другими строками, такими как

b61b25303be0f573a6b9446d5cbe3a5b  /var/www/html/index.php

Соответствующая информация об ошибке не может быть записана в файл по умолчанию (символ тройника).

find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori никогда не работает нормально.

Другие вопросы по теме