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