我有一个 Bash 脚本,它接受一个带有源代码的输入文件夹和一个输出目录作为参数。我希望能够编译源文件夹中的文件,然后将它们发送到输出文件夹。问题是xargs
在参数末尾添加了读取的源文件,我希望在其中添加输出文件夹。如何控制xargs
参数的位置?这就是我想要做的:find $source -name '*.c' | xargs gcc <files> $output
问问题
1196 次
3 回答
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
我不相信这是你所追求的结果。
于 2013-04-17T09:28:32.143 回答
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
于 2013-04-17T18:40:32.170 回答
0
使用 GNU 并行:
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
于 2013-04-17T18:14:41.357 回答