Почему эти сообщения «Permission Denied» в POSIX find-grep становятся читаемыми?

Есть две основные причины использования cat , как в вашем первом примере:

  1. В качестве заполнителя для некоторой другой команды или длинный и сложный конвейер команд.

    например. если вы пишете сценарий или однострочник для обработки огромного файла, или данные из psql / mysql или wget или jq и т. Д., Вы можете сохранить (часть) входных данных в образец файла и использовать cat sample в качестве входных данных, пока не получите правильный сценарий или однострочник. Затем просто замените cat фактической командой или конвейером.

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

    (Многие люди называют это бесполезным использованием кошки или UUOC.Это в основном потому, что они самодовольны и любят использовать свои якобы превосходные знания, чтобы побить новичков, а не помочь им учиться - ужасное преступление использования кота вместо < настолько важно, что его нельзя игнорировать, как если бы это была просто тривиальная деталь. мир кончится, это будет кот астрофа.)

  2. Если вы не хотите, чтобы программа знала имя (имена) входного файла (ов). например кот * | grep ... отличается от grep ... * .

    Это не имеет значения очень часто, но когда это имеет значение, это может иметь большое значение.

    Для grep вы можете запретить вывод списка имен файлов с помощью -h , но другие программы не имеют такой опции - wc , например, всегда будет вывести имена файлов и количество файлов, даже если они вам не нужны.

    Вы, конечно, можете использовать что-нибудь вроде wc * | хвост -1 | awk '{print $ 1, $ 2, $ 3}' , но это не сработает, если вы выполняете что-то вроде find. -type f -exec wc {} + и список имен файлов, сгенерированный с помощью find , превышает максимальную длину командной строки оболочки - в этом случае вы получите несколько строк 'total' (и нет никакого способа различения фактической итоговой строки и файла с именем 'total' в выводе wc ).

    найти. -type f -exec cat {} + | wc производит только одну строку вывода (итогов) независимо от того, сколько файлов найдет find , ни один, ни один, ни много.

    ( wc действительно нужны оба варианта - только итоги и - без итогов .)

4
23.05.2017, 15:40
0 ответов

Теги

Похожие вопросы