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

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

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

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

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

  • Запись zsh и вывод на другую команду
  • Grep каталог и возвращаемый список с номерами строк
  • Правильный синтаксис для использования awk в сочетании с другой командой внутри xargs sh -c
  • Используйте команду grep и найдите
  • Точный формат параметров xargs -I?
  • Как найти и скопировать файлы на основе расширения?
  • Добавить строку во многие файлы
  • xargs внутри цикла for
  • 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, если вы знаете, что у вас много файлов, чтобы уменьшить накладные расходы, обновляя ваш сценарий оболочки.

    Interesting Posts

    Проблемы с NTP – sntp: слишком много плохих или потерянных пакетов

    Почему я могу передать аргументы в / usr / bin / env в этом случае?

    Потеря данных KVM?

    Как объединить две команды grep и отобразить их результаты вместе?

    Мониторинг процесса в Debian

    Сканирование сгенерированного источника страницы

    Теоретическое минимальное количество блоков в группе – ext2

    Разный формат в терминале vs в .txt документе

    Отключите Энергоэффективный Ethernet (eee) aka Green Ethernet

    Почему mkfs может записывать SSD со скоростью 10 ГБ / с

    Как правильно установить файл tar.gz в Linux – как управлять установленными вручную (или отдельными) приложениями?

    Выходной текущий день с использованием cal

    CapsLock в качестве ключа-модификатора для клавиатур приложений

    Путь установки приложений для запуска

    Перемещение нескольких папок из одного репозитория subversion в другой репозиторий subversion

    Linux и Unix - лучшая ОС в мире.