Выполнение команды для многих файлов

Иногда держатели ключей действительно подписывают нечеловеческие ключи «sig1» (например, ключи репо).

на странице руководства;

1 означает, что вы считаете, что ключ принадлежит человеку, который утверждает, что владеет им , но вы не могли или не проверяли ключ вообще. Это полезно для подтверждения личности, когда вы подписываете ключ псевдонимного пользователя.

Я считаю, что это может повысить ценность, поскольку эти подписи не используются для повышения доверия, они используются только для ручной проверки / подтверждения.

Проблема с кем-либо, подписывающим нечеловеческий / псевдонимный ключ, заключается в том, что мы не знаем, кто будет управлять ключом через ... время. Большинство людей не хотят подписываться по этой причине.

Кроме того, в настоящее время Fedora относительно быстро заменяет ключ и публикует новый отпечаток пальца на своем веб-сайте, и всем подписавшимся потребуется время, чтобы отозвать подписи.

Что может быть более практичным:

  • кто-то становится владельцем ключа в Fedora (не псевдонимный ключ)
  • специальная команда, близкая к ключу в Fedora, подписывает / отзывает ключ.
  • веб-страница с текущим отпечатком пальца подписана кем-то в wot.

Но ... как уже было сказано, с подписью или без нее, отпечатки gpg ключей репо устанавливаются при установке ОС ... это проверяет все будущие обновления. Это добавляет мир безопасности.

19
03.07.2017, 00:25
6 ответов

Вы можете сделать что-то подобное в bashкомандной строке:

printf '%s\n' {1..5025} | xargs -l -I {} -t./transeq xyz{} xyz{}.faa -table 11

Мы генерируем целые числа от 1 до 5025, по одному в строке, затем передаем их один -на -один в xargs, который инкапсулирует целое число в {}, а затем трансплантирует его в команду./transeq линию соответствующим образом.

Если у вас нет средства расширения фигурной скобки -{n..m}, вы можете вызвать утилиту seqдля создания этих числовых значений.

Или вы всегда можете эмулировать числовое генерирование с помощью:

yes | sed -n =\;5025q | xargs...
6
27.01.2020, 19:44
for file in xyz*
do
 ./transeq "$file" "${file}.faa" -table 11
done

Это простой цикл for, который перебирает каждый файл, начинающийся с xyzв текущем каталоге, и вызывает программу ./transeqс именем файла в качестве первого аргумента, за именем файла следует ".faa" в качестве второго аргумента, за которым следует "-таблица 11".

34
27.01.2020, 19:44

Если вы устанавливаете GNU Parallel , вы можете сделать это параллельно следующим образом:

parallel./transeq {} {}.faa -table 11 ::: xyz*

Если ваша программа интенсивно использует ЦП, она должна немного ускориться.

24
27.01.2020, 19:44

Использование поиска полезно, когда ваши файлы разбросаны по каталогам

find -name "xyz*" -exec./transeq {} {}.faa -table 11 \;
4
27.01.2020, 19:44

Если предположить, что у вас более одного ядра, и каждый вызов может выполняться независимо от остальных, вы получите существенное ускорение при параллельном выполнении.

Относительно простой способ сделать это — использовать параметр -Pв xargs-, например, если у вас 4 ядра:

echo xyz{1..5025} | \
    xargs -n 1 -P 4 -I{} /path/to/transeq xyz{} xyz{}.faa -table 11

-n 1указывает xargsвыбирать только один аргумент из списка для каждого вызова(по умолчанию будет передаваться много ), а -P 4указывает запускать 4 процесса одновременно. время -когда один умирает, появляется новый.

ИМХО, вам не нужно устанавливать GNU parallel для этого простого случая-xargsдостаточно.

4
27.01.2020, 19:44

Вы можете использоватьxarg

ls | xargs -L 1 -d '\n' your-desired-command

-L 1вызывает передачу по 1 элементу за раз

-d '\n'сделать вывод lsразделенным на основе новой строки.

0
27.01.2020, 19:44

Теги

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