Как вы подаете в весь каталог входных файлов, используя cat в Unix? - PullRequest
0 голосов
/ 21 апреля 2010

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

cat myFile.xml | myProgram.py.

Как мне запустить myProgram.py над папкой, скажем, myFolder?

Спасибо!

Ответы [ 6 ]

3 голосов
/ 21 апреля 2010

Мне нравится

ls | xargs cat

за его функциональное ощущение языка. YMMV.

3 голосов
/ 21 апреля 2010

Если ваша программа может принять имя файла в качестве первого аргумента командной строки, один из способов - использовать find, чтобы найти все файлы в папке, а затем использовать xargs, чтобы запустить вашу программу для каждого из них:

find myFolder | xargs -n 1 myProgram.py

-n 1 означает «запускать программу один раз для каждого файла». Если ваша программа рада получить несколько имен файлов в своей командной строке, вы можете опустить -n 1, и xargs будет запускать вашу программу меньше раз с несколькими файлами в командной строке.

(find выполнит рекурсивный поиск, поэтому вы получите все файлы в и в myFolder. Вы можете использовать find myFolder -maxdepth 1, чтобы предотвратить это.)

(Спасибо @Personman за указание на то, что он запустит программу как для самой папки, так и для файлов. Вы можете использовать find myFolder -type f, чтобы указать find, что нужно возвращать только обычные файлы.)

1 голос
/ 21 апреля 2010

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

Скажем, вы хотите выполнить данные для всех текстовых файлов в текущем каталоге (и подкаталогах). Это все, что вам нужно:

find . -name "*.txt" -exec data {} \;

Если вы хотите ограничить его текущим каталогом, вы можете сделать это:

find . -maxdepth 1 -name "*.txt" -exec data {} \;

Существует множество опций с поиском.

1 голос
/ 21 апреля 2010

Как насчет:

for x in myFolder/*
do
cat $x | myProgram.py
done
0 голосов
/ 21 апреля 2010

или cat *.xml | myProgram.py, который будет выводить каждый файл .xml на стандартный ввод, а затем передаваться в вашу программу. Это объединяет все файлы в один поток.

myProgram.py *.xml будет расширять каждое имя файла как входные данные для вашей программы следующим образом: myProgram.py file1.xml file2.xml file3.xml ... filen.xml Каждый файл остается отдельным, и скрипт может отличать одно от другого.

Скрипты Python / Perl / sh, базовый регистр, обычно обрабатывают это так же, как myProgram.py file1.xml; myProgram.py file2.xml; myProgram.py filen.xml с ;, означающим новую команду.

Поиграйте с ним и добро пожаловать в Unix!

0 голосов
/ 21 апреля 2010

cat myFolder/* | myProgram.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...