使用 bash 一行行追加文件?

使用 bash 一行行追加文件?

目前我使用多行将内容附加到组合文件中,例如

./myprogram 1.txt > Out.txt # Overwrite for the 1st file
./myprogram 2.txt >> Out.txt
./myprogram 3.txt >> Out.txt
./myprogram 4.txt >> Out.txt

可以用单线代替吗?

答案1

(./myprogram 1.txt; ./myprogram 2.txt; ./myprogram 3.txt; ./myprogram 4.txt) > out.txt

答案2

这取决于您想要做什么以及您的程序如何处理输入参数。

但假设你有/path/to/myprogram.sh这样的人:

#!/bin/bash
echo "Processing file ${1?missing input file}"

你可以执行以下操作

find /path/to/inputfiles -name "*.txt" -exec /path/to/myprogram.sh {} \; > Out.txt

或者在 bash(或任何类似 Bourne 的 shell)中:

for i in *.txt; do /path/to/myprogram.sh "$i"; done > Out.txt

(我使用 for 循环或 find 是因为如果你有 1000 个输入文件而不是示例中的 4 个文件,它会方便得多)

答案3

与 Per 的答案非常相似,但保留了原始的布局:

{
    ./myprogram 1.txt
    ./myprogram 2.txt
    ./myprogram 3.txt
    ./myprogram 4.txt
} > Out.txt

http://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping

答案4

我发现这个解决方案更优雅:

FILE=/tmp/file.log

exec >> $FILE
./myprogram 1.txt
./myprogram 2.txt
./myprogram 3.txt
./myprogram 4.txt
exec 1<&2

echo 'Normal output has returned!'

相关内容