1

У меня есть сценарий Python, который берет файл .txt и что-то делает с ним. Мне нужна команда оболочки Linux, которая будет искать файлы .txt по всей системе и передавать файлы .txt моему скрипту Python. Я думаю, с помощью xargs я могу запустить процесс для файла, чтобы ускорить программу. Как я могу это сделать?

2 ответа2

0

я полагаю, что

find / -type f -name "*\.txt" -exec script.py '{}' \;

будет запускать script.py для каждого txt-файла в / ниже /, что приведет к тому, что количество ваших скриптов будет равно количеству найденных файлов.

Теперь, если вы хотите передать несколько найденных файлов в ваш скрипт одновременно, вы можете сделать:

find / -type f -name "*\.txt" -exec script.py '{}' +

Из справочной страницы find(1):

Этот вариант действия -exec запускает указанную команду для выбранных файлов, но командная строка создается путем добавления каждого выбранного имени файла в конце; общее количество вызовов команды будет намного меньше, чем количество совпавших файлов. Командная строка построена во многом так же, как xargs строит свои командные строки [...]

Очевидно, вы можете добиться того же с помощью xargs, но синтаксис менее лаконичен, поэтому я бы предпочел использовать действие find -exec.

0

С GNU Parallel вы можете сделать это:

find . -type f -name "*\.txt" | parallel python myscript.py

Он будет выполнять одну работу на ядро процессора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .