$ find / -path "*/metadata/*" -name "*.xml"
или, в зависимости от ваших потребностей, просто
$ find / -path "*/metadata/*.xml"
Но это не то же самое.
Первый найдет все файлы с суффиксом .xml
с путем, который содержит каталог метаданных
. Файлы могут находиться на несколько уровней ниже этого каталога.
Второй найдет все файлы с суффиксом .xml
, которые находятся в каталоге метаданных
.
Примечание: я использую /
, как вы сказали, «в файловой системе», что я интерпретировал как «где угодно».
В качестве альтернативы, используя locate
(будут найдены только файлы, доступные для всех пользователей):
$ locate "/metadata/" | grep '\.xml$'
(Это будет работать как первая находка
выше)
Как вы и предполагали, вы можете легко разобрать вывод от openssl pkcs12
, чтобы разделить части, если и только если идентификатором, который вам нужен, является friendlyname и/или localkeyid, потому что это единственные две части метаданных, которые обычно предоставляются. Например, для закрытых ключей используется только friendlyName, потому что это проще и обычно должно быть достаточно:
openssl pkcs12 -in combined -nocerts | awk '/friendlyName:/{n=$2} \
/^-----BEGIN.*PRIVATE/,/^-----END.*PRIVATE/{print >n".key"}'
Это требует ввода пароля входного p12, а также ввода двойного пароля для каждого выходного ключа; чтобы избежать этого, вы можете добавить опции -passin
и -passout
, как указано на странице руководства (при условии, что все выходные ключи будут использовать один и тот же пароль). Или, если можно, чтобы личные ключи НЕ шифровались, добавьте -nodes
-- если вы оперативно поместите их обратно в новые (и зашифрованные) файлы p12 и надежно сотрете (например, shred
) незашифрованные файлы, это будет безопасно; в противном случае вам нужно быть очень осторожным, чтобы никто посторонний не смог посмотреть или получить копию незашифрованных личных ключей.
То же самое можно сделать и с сертификатами, но, возможно, в этом нет необходимости. Если единственное, что вам нужно, это создать отдельные файлы p12, как вы описали, и ваши приватные ключи все разные, вы можете просто сделать для каждого приватного ключа
cat $one.key allcerts | openssl pkcs12 -export (other options) >$one.p12
и он будет помещать в каждый выходной p12 только один сертификат из входных allcerts
, который соответствует ключу.
Альтернативно, вместо заранее написанной openssl
командной строки, вы можете написать программу, используя библиотеку openssl, которая делает все, что вам угодно: тыкается внутри каждого из пакетов и подпакетов (после расшифровки), вытаскивает любые данные, которые вам нравятся, модифицирует их (возможно, переводит специальные символы и т.д.), и так далее. Однако это значительно большая работа.