Как найти файлы на основе их разрешений в Linux

Вы не объясняете, что такое ваш стандартный вывод и куда он идет! (Например, стандартный вывод приложения CGI отправляется -косвенно -в какой-либо браузер ).

Философия Unix и конвейеры Unix требуют, чтобы stdin и stdout были обычным текстом, но это всего лишь соглашение . В некоторых случаях у вас могут быть другие соглашения (, например lprили lp, которые часто предпочитают PDF на стандартном вводе ).

Если вы программируете какую-либо программу, вы можете указать для нее какой-либо режим (, например. указывается некоторым программным аргументом )для вывода более структурированного текста, такого как JSON или XML или CSV или YAML . Обратите внимание, что jq может обрабатывать JSON.

Некоторые программы обнаруживают (, используя isatty и/или fstat ), когда их stdout(или их stdin)являются терминалом и действуют соответственно (возможно, используя ncurses , termios или escape-коды ANSI).

Многие текстовые форматы (, в частности XML ), имеют обычные начальные символы или заголовки, поэтому в некоторых случаях возможно их угадывание (, т.е. определение формата файла ). Посмотрите также MIME и libmagicфайл (1)).

I have a script that produces two different (unknown) strings and two different (unknown) numbers for each file it processes. Then there is another script that reads from STDIN to process each of the given strings, numbers. How can I format the output of the first script, so that the second can be made to identify each type correctly?

Если вы знаете (и документируете ), что неизвестные строки достаточно хороши, чтобы не содержать управляющих символов, таких как символы новой строки (, поэтому каждая из них представляет собой одну строку ), вы можете выбрать какой-то формат, например

FIRSTSTRING:первая строка

FIRSTNUMBER:первый номер

например

 FIRSTSTRING: foo bar is nice!
 FIRSTNUMBER: 42

затем напишите и используйте какой-нибудь простой awkскрипт (или, возможно, используйтеsed)для второго скрипта

Другими словами, принять решение и задокументировать простой специальный -формат; в вашем случае может быть проще в обращении, чем JSON. У вас могут быть свои собственные -специальные соглашения, если вы задокументируете их (, возможно, используя некоторые EBNF нотации ).

Многие инструменты уже готовы к этому; например, ps, ls, dfи ifconfigимеют специальные -специальные, но хорошо задокументированные выходные форматы и соглашения. И аналогично для proc (5). Следовательно, многие сценарии могут анализировать такие выходные данные.

Однако JSON был разработан, чтобы быть простым, гибким, масштабируемым, расширяемым,... И он способен представлять произвольные строки (даже с управляющими символами, большим количеством строк и т. д. ). Если для вас это важно, используйте его.

Можно заново изобрести и заново реализовать все утилиты Unix для вывода, например. JSON или XML (, но для этого требуется много работы ). Например, некоторые люди заново изобрели proc (5)и сделали модулем ядра, чтобы иметь псевдофайловую систему /xmlproc/вместо /proc/, которая выводила системные данные ядра в некоторая XML-форма. Но это не увенчалось успехом! Социальные соглашения имеют большое значение (, поэтому так важно задокументировать формат вывода, по крайней мере, в длинном комментарии ).

(Даже если вы используете JSON или XML, вам необходимо задокументировать, как вы их используете)

Кстати, многие существующие инструменты Unix могут добавлять тонкости в соглашения. Например, пробел, табуляция или символ возврата в пути к файлу возможны (см. путь _разрешение (7 )), но на (это может быть неодобрительно, поэтому я никогда этого не делаю ). Каталог $HOMEнекоторого пользователя теоретически может содержать символ возврата или двоеточие, но если вы это сделаете, большинство инструментов пострадает (, и вы, вероятно, сломаете passwd (5).. ). Пути к файлам, начинающиеся с тире, неудобны, как и очень длинные пути (, например. ваш $HOMEтеоретически может состоять из 3000 символов, но это было бы действительно неразумно ).

0
11.10.2019, 08:49
1 ответ

-perm /102будет просто сопоставлять файлы, у которых установлены любые из этих битов, как описано на странице руководства.

Чтобы добиться желаемого, вам понадобятся два -permпредиката; тот, который исключает ваше разрешение «нет», и тот, который включает ваше разрешение «да»:

find... \! -perm /070 -perm /006
2
28.01.2020, 02:29

Теги

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