我正在尝试运行一个名为buildAll.sh的文件,该文件应该从基准测试生成二进制文件并将其全部放入顶层目录。
#!/bin/sh
find . -d 1 -type d \( ! -name . \) -exec bash -c "cd {} && make clean && make && cp main.bin ../{}.bin && make clean" \;
但是,我得到一个错误:
find: paths must precede expression: `1'
我不确定该命令的工作方式以及修复方法。
我在Ubuntu上运行了它。 谢谢
答案 0 :(得分:1)
-d
是-depth
的同义词,-表示首先处理最深的-,并且不接受参数。放下1
,就可以了。例如:
find . -d -type d \( ! -name . \) -exec bash -c "cd {} && make clean && make && cp main.bin ../{}.bin && make clean" \;
如果您愿意接受建议,我有两个建议:
sh
,在POSIX specification of find
中指出:
如果某个utility_name或参数字符串包含两个字符“ {}”,而不仅仅是两个字符“ {}”,则实现定义是find替换这两个字符还是使用不变的字符串。
即使您可以将位置参数传递给外壳,您基本上也依赖于实现定义的功能。
因此,我将改为执行以下操作:
find -d -type d \( ! -name '.' \) -exec sh -c 'cd "$1" && make clean && make && cp main.bin "../$1.bin" && make clean' _ {} \;