Выравнивание столбцов для получения листинга в стиле `ls -l` с помощью find

  1. Для портов 993 и 995 требуется SSL/TLS, вы не можете просто подключиться к ним через telnet и ожидать, что данные будут напечатаны открытым текстом. Используйте что-то вроде openssl s_client -quiet -connect youdomain.tld:993илиopenssl s_client -quiet -connect youdomain.tld:995

  2. protocols = imap pop3 imap pop3< -Почему вы перечисляете их дважды?

  3. inet_listener imap { port = 0 }< -Здесь вы отключаете IMAP на порту 143, поэтому вы не можете подключиться к этому порту через telnet. Не отключайте IMAP, просто используйте disable_plaintext_authentication=yes, если вы хотите иметь безопасный вход в систему TLS.

  4. inet_listener pop3 { port = 0 }< -Здесь вы отключаете POP3 на порту 110, поэтому вы не можете подключиться к этому порту через telnet. Не отключайте POP3, просто используйте disable_plaintext_authentication=yes, если вы хотите иметь безопасный вход в систему TLS.

Кстати,вы включаете протоколы imap и pop3 и имеете некоторую конфигурацию для lmtp, но не включаете протокол lmtp.

0
26.07.2019, 00:54
2 ответа

Спецификаторы формата -printfв GNU findпринимают ширину и выравнивание (и т. д. )квалификаторы, как и функция printf()C, что означает, что вы можете выравнивать данные по левому или правому краю и, что особенно важно, для вашего текущего проекта выделите определенную ширину для данных.

Выход по умолчанию:

$ find. -printf '%M %u %g %p\n'
drwxr-xr-x kk wheel.
-rw-r--r-- kk wheel./.zshrc
-rw-r--r-- kk wheel./file
drwxr-xr-x root wheel./rootstuff
-rw-r--r-- root wheel./rootstuff/SECRET
-rw------- kk wheel./.viminfo

Указание ширины (6 )для пользовательских и групповых столбцов (справа -по ширине):

$ find. -printf '%M %6u %6g %p\n'
drwxr-xr-x     kk  wheel.
-rw-r--r--     kk  wheel./.zshrc
-rw-r--r--     kk  wheel./file
drwxr-xr-x   root  wheel./rootstuff
-rw-r--r--   root  wheel./rootstuff/SECRET
-rw-------     kk  wheel./.viminfo

То же, но оставлено -обоснованным:

$ find. -printf '%M %-6u %-6g %p\n'
drwxr-xr-x kk     wheel .
-rw-r--r-- kk     wheel ./.zshrc
-rw-r--r-- kk     wheel ./file
drwxr-xr-x root   wheel ./rootstuff
-rw-r--r-- root   wheel ./rootstuff/SECRET
-rw------- kk     wheel ./.viminfo

При размерах файлов в байтах выделение 5 цифр (нулями -заполнено, т.к. просто показано, как это можно было сделать):

$ find. -printf '%M %-6u %-6g %05s %p\n'
drwxr-xr-x kk     wheel  00512.
-rw-r--r-- kk     wheel  00000./.zshrc
-rw-r--r-- kk     wheel  00095./file
drwxr-xr-x root   wheel  00512./rootstuff
-rw-r--r-- root   wheel  00000./rootstuff/SECRET
-rw------- kk     wheel  00922./.viminfo

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


Конечно, если у вас не много тысяч файлов, и вы просто хотите получить список всего , рекурсивно (т. е. вам не нужно фильтровать или делать что-то еще с найденные пути в find), вы можете просто использоватьls:

$ ls -d -l **/*
-rw-------  1 kk    wheel  922 Jul 25 23:46.viminfo
-rw-r--r--  1 kk    wheel    0 Jul 19 23:39.zshrc
-rw-r--r--  1 kk    wheel   95 Jul 25 23:51 file
drwxr-xr-x  2 root  wheel  512 Jul 26 00:00 rootstuff
-rw-r--r--  1 root  wheel    0 Jul 26 00:00 rootstuff/SECRET

Это зависит от наличия шаблона подстановки **, который используется по умолчанию в оболочке zshи в bash, если вы используете shopt -s globstar. Он также полагается на то, что оболочка сопоставляет скрытые имена. Оболочка zshсделает это, если вы установите опцию GLOB_DOTSс помощью setopt GLOB_DOTS, а bashсделает это с помощью shopt -s dotglob.

Это не сработает, если шаблон подстановки расширяется до списка настолько длинного, что генерирует ошибку «Слишком длинный список аргументов».

Этот вывод будет отличаться от обычного вывода ls -l -Rтем, что каталоги не будут перечислены по отдельности с разрывами между ними.

2
28.01.2020, 02:22

Вот еще одна простая альтернатива

$ find example -exec ls -ld {} +
0
14.11.2021, 07:46

Теги

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