Передача результатов поиска в xargs для запуска скрипта Python
Я вижу здесь самые странные результаты и надеялся, что кто-нибудь сможет мне это объяснить.
Итак, я использую команду find, чтобы найти все файлы типа.log, и передаю результаты этой команды в скрипт python. ТОЛЬКО первый результат команды find передается в xargs или xargs получает все результаты и передает их в виде строки в скрипт python.
Пример:
# Find returns 3 .log files
find . -name "*.log"
file1.log
file2.log
file3.log
# xargs only runs the python script for first found file (or all 3 are being piped to script as a single string, and only first result is read in)
find . -name "*.log" | xargs python myscript.py -infile
Success: parsed file1.log
Я хочу, чтобы скрипт Python запускался для всех 3 найденных файлов.
find . -name "*.log" | xargs python myscript.py -infile
Success: parsed file1.log
Success: parsed file1.log
Success: parsed file1.log
1 ответ
Более безопасный способ сделать это следующим образом:
find . -name "*.log" -print0 | \
xargs -0 -I {} python myscript.py -infile {}
При передаче имен файлов из
С
- "-L 1", если вам просто нужно имя файла в качестве последнего аргумента.
- "-I {}" для передачи одного или нескольких команде в любом месте команды.