2014-09-11 2 views
0

У меня есть сценарий, который мне нужно запустить на большом количестве файлов.Выполнить скрипт для запуска в нескольких файлах

Это сценарий, и как она выполняется:

./tag-lbk.sh test.txt > output.txt 

Он принимает файл в качестве входных данных и создает выходной файл. Мне нужно запустить это на нескольких входных файлах, и мне нужен другой выходной файл для каждого входного файла.

Как бы я это сделал? Могу ли я создать скрипт (у меня мало опыта написания сценариев bash).

[редактирует]:

@fedorqui спросил: Где имена входных файлов и выходных файлов хранятся?

Существует несколько тысяч файлов, каждый из которых имеет уникальное имя. Я думал, может быть, есть способ рекурсивно перебирать все файлы (все они .txt-файлы). Выходные файлы должны иметь имена, которые генерируются рекурсивно, но случайным образом.

+1

Где имена входа файлы и выходные файлы? – fedorqui

+0

^^ Или они могут быть сгенерированы из цикла, например. file1.txt, file2.txt и т. д.? – anishsane

ответ

1

Простое решение: используйте две папки.

for input in /path/to/folder/*.txt ; do 
    name=$(basename "$input") 
    ./tag-lbk.sh "$input" > "/path/to/output-folder/$name" 
done 

или, если вы хотите, все в той же папке:

for input in *.txt ; do 
    if [[ "$input" = *-tagged.txt ]]; then 
     continue # skip output 
    fi 
    name=$(basename "$input" .txt)-tagged.txt 
    ./tag-lbk.sh "$input" > "$name" 
done 

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

0

Ниже будут найдены файлы с расширением .txt и перенаправить вывод тегов 1bk сценария для случайно сгенерированных файла журнала log.123 ..

#!/bin/bash 
declare -a ar 
# Find the files and store it in an array 
# This way you don't iterate over the output files 
# generated by this script 
ar=($(find . -iname "*.txt")) 
#Now iterate over the files and run your script 
for i in "${ar[@]}" 
do 
    #Create a random file in the format log.123,log.345 
    tmp_f=$(mktemp log.XXX) 
    #Redirect your output to the log file 
    ./tag-lbk.sh "$i" > $tmp_f 
done 
Смежные вопросы