Ускорение команды поиска rm с проверкой путем распараллеливания

Я хочу рекурсивно удалить все файлы в каталогах и подкаталогах с количеством строк менее 10, и в настоящее время я использую следующую команду

find . -type f -name "*.txt" | while read; do (($(cat $THISFILE | wc -l) < 10)) && rm -vf "$THISFILE"; done 

Я уже использовал find с xargs для параллелизации некоторых команд, но здесь я не знаю, как это сделать из-за теста на линиях с wc -l

Как я могу ускорить работу с (или без!) xargs ?

One Solution collect form web for “Ускорение команды поиска rm с проверкой путем распараллеливания”

найти себя не может выполнить параллельно (не то, что я знаю).

xargs могут это сделать, и самый простой способ сделать это с помощью xargs – это обернуть его в сценарий оболочки.

Но перед этим вы должны оптимизировать свое состояние. cat бесполезен, если фактически не конкатенировать файлы. И вам не нужно подсчитывать ВСЕ строки, чтобы определить, что файл имеет 10 или более. Поэтому я предлагаю такое условие:

 [ $(head -n 10 "$file" | wc -l) -lt 10 ] && echo rm "$file" 

который читает только первые 10 строк и удаляет файл, если он не имеет такого количества (rm немного опасно, поэтому я добавил echo чтобы вы могли сначала его протестировать). В отличие от кота, голова фактически перестает читать после достижения 10 строк, поэтому, если у вас есть файлы с большим количеством 10 строк в вашем каталоге, это должно ускорить процесс.

Обернутый в сценарий оболочки так:

 #!/bin/bash for file in "$@" do [ $(head -n 10 "$file" | wc -l) -lt 10 ] && echo rm "$file" done 

Вы можете использовать find + xargs для многопроцессорной обработки:

 find . -type f -name "*.txt" -print0 | xargs -0 -P 4 -n 8 ./rm10lines.sh 

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

  • Получение размера родительских папок при использовании поиска для поиска критериев?
  • Правильный синтаксис для использования awk в сочетании с другой командой внутри xargs sh -c
  • Xargs и rm с a *
  • Найти, сочетание xargs и grep вызывает ошибку
  • Проблемы с find, xargs и egrep
  • Формат вывода xargs
  • Комбинация ls, xargs и zcat приводит к дублированию суффиксов имени файла?
  • Как получить код выхода параллельного процесса, запущенного xargs?
  • Возможно ли, чтобы ls поддерживал порядок своих входов
  • Исправлен последний аргумент с xargs
  • Есть ли способ использовать xargs через трубу?
  • Linux и Unix - лучшая ОС в мире.