поиск всех каталогов, кроме скрытых

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

Список шифров ECDHE *задается командой оболочки

openssl ciphers | tr ":" "\n" | grep ^ECDHE | tr "\n" ":" | sed 's/:$//'

Вы не сказали, что вы хотите делать с шифрами, имена которых не начинаются с ECDH *, но изменив аргумент на grep в приведенном выше примере, вы можете получить любой список шифров. вы хотите, и объедините их в текстовом редакторе по мере необходимости. Таким образом, чтобы получить список шифров AES, но не шифров AES128 *, вы должны сказать^AES[^1]

Тем не менее, возможно, придется немного повозиться вручную, поскольку порядок шифров в списке может быть важен. Вы можете и, вероятно, должны указать, что сервер должен пробовать шифры в том порядке, в котором они находятся в списке включения.

4
27.09.2020, 19:56
4 ответа

просто используйте:

find. ! -path '*/.*' -type d
2
18.03.2021, 23:02

Я предполагаю, что вы классифицируете каталоги, начинающиеся с точки, как "скрытые". Чтобы избежать спуска в такие каталоги, вы должны использовать -prune.

find. -mindepth 1 -type d \( -name '.*' -prune -o -print \)

Это начинается в текущем каталоге (мы могли бы указать здесь *, но это предполагает, что ваш подстановочный знак не установлен для включения точечных файлов/каталогов -, например bash'sdotglob). Затем он соответствует только каталогам, но не учитывает сам .. Раздел в скобках сообщает find, что если имя соответствует .*, то оно должно быть сокращено, чтобы ни оно, ни его потомки не рассматривались в дальнейшем; в противном случае выведите его имя.

Если у вас нет опции (non -POSIX )-mindepth, вы можете использовать эту альтернативу. Возможно, это лучше, чем первоначальное решение, которое я предложил, но я оставлю оба ответа в ответе

find. -type d \( -name '.?*' -prune -o -print \)
5
18.03.2021, 23:02

Сzsh:

print -rC1 -- **/*(N/)

(zsh globs по умолчанию пропускает скрытые файлы ).

Или делать что-либо с этими директориями:

for dir (**/*(N/)) anything with $dir

или, если anythingможет принимать более одного файла одновременно, с GNU xargsили совместимым:

xargs -r0a <(print -rNC1 -- **/*(N/)) anything with

POSIXly:

LC_ALL=C find. -name '.?*' -prune -o -type d -print

LC_ALL=Cнеобходим, иначе он не сможет пропустить скрытые каталоги, имя которых содержит последовательности байтов, которые не образуют допустимый символ в локали пользователя. Посмотрите также, как порядок предикатов гарантирует, что мы избежим применения -type d(, что потенциально связано с дополнительным дорогостоящим lstat()системным вызовом )для тех файлов, имя которых начинается с ..

Этот также выводит.(текущий рабочий каталог ), добавьте ! -name.перед -type, если он вам не нужен, или измените его на:

LC_ALL=C find. ! -name. \( -name '.*' -prune -o -type d -print \)

Сделайте что-нибудь с файлами, замените -printна -exec anything with {} ';'или -exec anything with {} +, если anythingможет принимать более одного файла одновременно.

5
18.03.2021, 23:02

Альтернативой является инструмент с открытым исходным кодом Fd:

https://github.com/sharkdp/fd

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

fd -t d

Если вы хотите отобразить элементы, вы можете использовать один или оба из них:

-H, --hidden            Search hidden files and directories
-I, --no-ignore         Do not respect.(git|fd)ignore files
2
18.03.2021, 23:02

Теги

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