2013-11-27 3 views
1

У меня есть исполняемый файл test, который принимает .txt файл в качестве входных данных, например, мы можем выполнить в терминале ./test input.txt > result.txtЗапустите исполняемый файл на все файлы в папке (с подпапки)

У меня есть также папка folder который содержит подпапки и файлы .txt.

Я хотел бы написать Баш, чтобы сделать следующую задачу: пройти через все .txt внутри folder, запустите исполняемый файл на него, и поместить результат в виде отдельного файла.

Например, для folder\subfolder1\01-input.txt, я хотел бы поместить результат в файл с именем subfolder1_01-input.txt (результат не обязательно назван так, имена просто используются для дифференциации результатов и позволяет мне проследить на соответствующий входной файл).

Все результаты могут быть собраны в большой папке под названием results.

Кто-нибудь знает, как написать этот баш?

В первую очередь, чтобы упростить задачу, можно предположить, что: есть только один уровень подкаталогов в folder, и все .txt входы расположены под подпапках folder.

+0

Что вы пробовали? Вы должны прочитать хотя бы учебник для новичков или сделать некоторые поисковые запросы. Этот вопрос задан в миллион раз –

ответ

1
for foldername in folder/*; do cd "$foldername"; for filename in *.txt; do ../../test "$filename" > output_"$filename"; done ; cd ../..; done 

Обратите внимание на имя выходного файла не соответствует вашей спецификации, это упражнение остается читателю ;-)

+1

Обратите внимание на цитату: '' $ foldername "', '" $ filename "', 'output _" $ filename "' –

-1
find $topleveldir -type f -exec sh -c 'file="{}"; log="${file//\//_}".txt; log="${log/#.}" ; echo $file $log ; ./test $file > $log' \; 

Если сомневаетесь поставить редирект в обертку сценария и просто сделать -exec сырье т.е.

find $toplevel -type f -exec testwithitsownrediect.sh {} \; 

Я предполагаю, Баш и пистолет найти

+0

-1: действительно! Перед отправкой вы должны проверить свои ответы. '-exec' не принимает сценарий оболочки, но аргументы execvp-типа ... –

+1

@JoSo OTOH' find' - это правильный способ сделать это, возможно, также с '-name \ *. txt' –

+0

-exec принимает сценарий оболочки Ваш вопрос о стендах тестирования – tolanj

Смежные вопросы