如果目录模式存在,则Bashtesting并执行

你如何做一个内联testing目录模式的存在?

如果目录模式存在,那么我想chmod该模式。

例如我试图做到以下几点:

[ -d /usr/local/myproject/*/bin ] && chmod +x /usr/local/myproject/*/bin/* 

但是这给了我错误“-bash:[:too many arguments”。

没有必要测试:

 chmod +x /usr/local/myproject/*/bin/* 2>/dev/null 

它不起作用,因为-d测试需要一个参数。 你似乎正在超过一个。 解决方法是:

 for dir in /usr/local/myproject/*/bin; do [[ -d $dir ]] && chmod +x $dir/* done 

为了挽回我的答案中的一些用处,假设你有太多的bin目录,你不能这样做。

 find /usr/local/myproject/ -path '/usr/local/myproject/*/bin' -maxdepth 2 -type d -exec chmod a+x {} + 2>/dev/null