如何控制xargs参数的位置?

时间:2013-04-17 08:32:31

标签: bash xargs

我有一个Bash脚本,它将输入文件夹的源代码和输出目录作为参数。我希望能够编译源文件夹中的文件,然后将它们发送到输出文件夹。问题是xargs在参数的末尾添加了读源文件,我希望在其中添加输出文件夹。如何控制xargs参数的位置?这就是我想要做的事:find $source -name '*.c' | xargs gcc <files> $output

3 个答案:

答案 0 :(得分:2)

这可以通过以下方式实现:

find $source -name '*.c' | xargs gcc -o $output

在指定源文件列表之前指定gcc的输出。

通过更改xargs参数的位置无法解决此问题,就像您这样做:

find $source -name '*.c' | xargs -I source gcc source -o $output

假设您从source/a.c返回source/b.cfind,将会运行什么:

gcc source/a.c -o $output
gcc source/b.c -o $output

我不相信你所追求的结果。

答案 1 :(得分:0)

使用GNU Parallel:

find $source -name '*.c' | parallel gcc {} -o $output/{.}

或者如果您想要{}中的所有文件:

find $source -name '*.c' | parallel -Xj1 gcc {} -o $output

了解有关GNU Parallel的更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

10秒安装:

wget pi.dk/3 -qO - | sh -x

答案 2 :(得分:0)

此任务也可以仅使用Bash来解决:

#!/bin/sh

if [ $# -ne 2 ]; then
    echo "usage: $0 [srcdir] [bindir]"
    exit 1
fi

src_dir="${1%/}"
bin_dir="${2%/}"

for src in "$src_dir"/*.c; do
    bin="$(basename "${src%.c}")"
    gcc "$src" -o "$bin_dir/$bin"
done