найти и выполнить bsub < для нескольких файлов

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

ls -Ss1pq --block-size=1
0
19.06.2020, 18:50
3 ответа

Вы почти угадали с первой попытки. Что вам нужно сделать, так это вызвать оболочку для анализа оператора перенаправления <

find -name '*.lsf' -exec bash -c 'bsub <"$1"' _ {} \;

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

find -name '*.lsf' -exec bash -c 'for i in "$@"; do bsub <"$i"; done' _ {} +

Оба они являются файлами -безопасными (, т. е. они обрабатывают пробелы и не -печатаемые/полупечатаемые -символы в именах файлов ).

0
18.03.2021, 23:26

Вы можете работать сxargs:

find./ -type f -name "*.lsf" | xargs bsub

На самом деле, вы можете сократить дырку до:

find *.lsf | xargs bsub

Комментарий :Проверено на кластере, который я использую.

Изменить :Удалены опция замены строки и символ перенаправления.

0
18.03.2021, 23:26

Используя xargs, работающим способом. (Обратите внимание, как сказал @KamilMaciorowski, это небезопасно.)

find. -type f -iname "*.lsf" | xargs -I {} bash -c 'cat < {}'

Затем исправление для файлов -пробелов имен и т. д.

find. -type f -iname "*.lsf" -print0 | xargs -0 -I {} bash -c 'cat < {}'

Я тестировал с cat. Вам придется заменить на вашу команду

0
18.03.2021, 23:26

Теги

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