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

Bash 执行脚本以在多个文件上运行,bash,shell,terminal,Bash,Shell,Terminal,我有一个脚本,需要在大量文件上运行 以下是脚本及其运行方式: ./tag-lbk.sh test.txt > output.txt 它将一个文件作为输入并创建一个输出文件。我需要在几个输入文件上运行它,我希望每个输入文件都有一个不同的输出文件 我该怎么做呢?我可以制作一个脚本吗(我没有太多编写bash脚本的经验) [编辑]: @fedorqui问:输入文件和输出文件的名称存储在哪里 有几千个文件,每个文件都有一个唯一的名称。我在想也许有一种方法可以递归地遍历所有文件(它们都是.txt文件

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

以下是脚本及其运行方式:

./tag-lbk.sh test.txt > output.txt
它将一个文件作为输入并创建一个输出文件。我需要在几个输入文件上运行它,我希望每个输入文件都有一个不同的输出文件

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

[编辑]:


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


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

简单解决方案:使用两个文件夹

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

在文件被删除、损坏和覆盖时,在不重要的地方尝试使用少量输入。下面的脚本将找到扩展名为.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

输入文件和输出文件的名称存储在哪里?^^^或者它们可以从循环生成,例如file1.txt、file2.txt等?