如何在当前路径和子目录中找到每个Makefile
文件,并在每次出现时运行make clean
命令。
我到现在为止(不起作用)是这样的:
find . -type f -name 'Makefile' 2>/dev/null | sed 's@/Makefile@@' | xargs -I% cd % && make clean && cd -
另一种选择是将find
与-execdir
一起使用,但这会让我遇到$PATH
的问题:The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find ....
但我不想更改$PATH
变量。
使用我使用的工具回答会有所帮助,这样我才能理解我做错了什么, 但任何可行的答案都是可以接受的。
答案 0 :(得分:2)
如果您想使用find
的执行功能,您仍然可以执行此操作:
find "${PWD}" -name Makefile -exec sh -c 'cd "${0%Makefile}" && make clean' {} \;
答案 1 :(得分:2)
当然,find是一个选择..我的方法更像是:
find . -name Makefile -exec bash -c 'make -C "${1%/*}" clean' -- {} \;
但是既然你正在使用bash,如果你在bash 4中,你也可以使用globstar。
shopt -s globstar
for f in **/Makefile; do make -C "${f%/*}" clean; done
答案 2 :(得分:1)
我会使用以下方法:
%
请注意find "$(pwd)" -name Makefile | while read -r line; do cd "$(dirname "$line")" && make clean; done
,它将完整路径作为find $(pwd)
的输出。