Если вы хотите использовать ls, но сохранить правильный размер, вы можете использовать:
ls -Ss1pq --block-size=1
Вы почти угадали с первой попытки. Что вам нужно сделать, так это вызвать оболочку для анализа оператора перенаправления <
find -name '*.lsf' -exec bash -c 'bsub <"$1"' _ {} \;
Однако это не очень эффективно, так как теперь вы запускаете оболочку для каждого совпавшего файла. Вызывайте оболочку как можно меньше раз и используйте цикл для одновременной обработки нескольких файлов
find -name '*.lsf' -exec bash -c 'for i in "$@"; do bsub <"$i"; done' _ {} +
Оба они являются файлами -безопасными (, т. е. они обрабатывают пробелы и не -печатаемые/полупечатаемые -символы в именах файлов ).
Вы можете работать сxargs
:
find./ -type f -name "*.lsf" | xargs bsub
На самом деле, вы можете сократить дырку до:
find *.lsf | xargs bsub
Комментарий :Проверено на кластере, который я использую.
Изменить :Удалены опция замены строки и символ перенаправления.
Используя 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
. Вам придется заменить на вашу команду