执行脚本以在多个文件上运行

时间:2014-09-11 15:00:05

标签: bash shell terminal

我有一个脚本需要在大量文件上运行。

这是脚本及其运行方式:

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

它将文件作为输入并创建输出文件。我需要在几个输入文件上运行它,我想为每个输入文件使用不同的输出文件。

我该怎么做呢?我可以制作一个脚本(我没有太多编写bash脚本的经验)。

[编辑]:

@fedorqui问:存储输入文件和输出文件的名称在哪里?

有几千个文件,每个文件都有一个唯一的名称。我想也许有一种方法可以递归遍历所有文件(它们都是.txt文件)。输出文件应具有递归生成的名称,但是以随机方式生成。

2 个答案:

答案 0 :(得分: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

尝试使用一小组输入,在文件被删除,损坏和覆盖时无关紧要。

答案 1 :(得分:0)

以下脚本将找到扩展名为.txt的文件,并将tag-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