我有一个脚本需要在大量文件上运行。
这是脚本及其运行方式:
./tag-lbk.sh test.txt > output.txt
它将文件作为输入并创建输出文件。我需要在几个输入文件上运行它,我想为每个输入文件使用不同的输出文件。
我该怎么做呢?我可以制作一个脚本(我没有太多编写bash脚本的经验)。
[编辑]:
@fedorqui问:存储输入文件和输出文件的名称在哪里?
有几千个文件,每个文件都有一个唯一的名称。我想也许有一种方法可以递归遍历所有文件(它们都是.txt文件)。输出文件应具有递归生成的名称,但是以随机方式生成。
答案 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