У меня есть сценарий Python, который берет файл .txt и что-то делает с ним. Мне нужна команда оболочки Linux, которая будет искать файлы .txt по всей системе и передавать файлы .txt моему скрипту Python. Я думаю, с помощью xargs
я могу запустить процесс для файла, чтобы ускорить программу. Как я могу это сделать?
2 ответа
я полагаю, что
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.
С GNU Parallel вы можете сделать это:
find . -type f -name "*\.txt" | parallel python myscript.py
Он будет выполнять одну работу на ядро процессора.