Intereting Posts
Как я могу перечислить все имена пользователей в Solaris 10? Предотвратить соединение wpa_supplicant со скрытыми сетями Как использовать sed для извлечения из xml после сопоставления с шаблоном в одном из тегов внутри? Установка Virtual Python, не позволяющая ez_setup? Извлечение вложенных zip-файлов Почему заголовки ядра Linux содержат ссылки на несуществующие заголовки? Как запустить скрипт bash с диалогом при запуске Centos 7 Таблицы реформатов Как сделать все, что делает «make install», с «install» для предварительно скомпилированного пакета? Как скопировать контекст SELinux из одного каталога и применить его к другому каталогу? Bash сбой при запуске общих команд Как отлаживать то, что останавливает пинг для ответа на нашем сервере? Yowsup на ubuntu touch: –enable-jpeg запрошено, но jpeg не найден Linux монтирует клонированный раздел вместо оригинального fedora На устройстве не осталось места: ‘/var/cache/dnf/metadata_lock.pid’ // но пространство огромно

Как избавиться от сообщения «блоков», данного cpio?

Я пытаюсь просмотреть это: Как получить сумму MD5 содержимого каталога в виде одной суммы? , и поэтому я пытаюсь:

$ find | LC_ALL=C sort | cpio -o | md5sum 25324 blocks 6631718c8856606639a4c9b1ef24d420 - 

Хм … Я бы хотел просто хеш, а не что-то еще в выходе … поэтому, предполагая, что «25324 блоков» было напечатано в stderr, я пытаюсь перенаправить stderr в /dev/null :

 $ find | LC_ALL=C sort | cpio -o | md5sum 2>/dev/null 25324 blocks 6631718c8856606639a4c9b1ef24d420 - 

Нет, это не так. Давайте просто ради сателлитов, попробуем перенаправить stdout на /dev/null :

 $ find | LC_ALL=C sort | cpio -o | md5sum 1>/dev/null 25324 blocks 

Хорошо, поэтому хэш ушел, как ожидалось, но сообщение «блоки» все еще существует?! Где, черт возьми, этот «25324 блоков» напечатан, через файловый дескриптор 3?!:

 $ find | LC_ALL=C sort | cpio -o | md5sum 3>/dev/null 25324 blocks 6631718c8856606639a4c9b1ef24d420 - 

Нет, это не так … В любом случае, я могу получить хэш с awk:

 $ find | LC_ALL=C sort | cpio -o | md5sum | awk '{print $1}' 25324 blocks 6631718c8856606639a4c9b1ef24d420 

но все же выдается сообщение «блокирует» darn … Итак, как он печатается на терминале вообще (поскольку он, кажется, не печатается ни с помощью stdout, ни с stderr), и как я могу подавить это сообщение?


EDIT: нашел ответ, сообщение «блоки» напечатано cpio самом деле, поэтому правильная вещь:

 $ find | LC_ALL=C sort | cpio -o 2>/dev/null | md5sum | awk '{print $1}' 6631718c8856606639a4c9b1ef24d420 

Теперь у нас есть только хэш …

Сообщение печатается cpio , это позволяет избежать этого:

 find | LC_ALL=C sort | cpio -o 2> /dev/null | md5sum | awk '{print $1}' 

Как отмечает Гилл, вы потеряете все сообщения об ошибках, напечатанные cpio если вы используете этот подход. Некоторые версии cpio (по крайней мере, GNU и FreeBSD) поддерживают quiet вариант:

 find | LC_ALL=C sort | cpio -o --quiet | md5sum | awk '{print $1}' 

Чтобы избежать потери ошибок с версией cpio которая не поддерживает --quiet , вы можете записать их во временный файл:

 cpiolog=$(mktemp); find | LC_ALL=C sort | cpio -o 2> "${cpiolog}" | md5sum | awk '{print $1}'; grep -v blocks "${cpiolog}"; rm -f "${cpiolog}" 

Это сообщение напечатано cpio . С помощью GNU cpio или FreeBSD cpio передайте параметр --quiet для его подавления.

Или возьмите cpio и используйте стандартный pax или более обычный tar вместо этого.