Confirm the existence of one or more directories
我想使用通配符检查Bash脚本中是否存在一个或多个目录。
我试过这个;
1 2 3 4 5 6 7 | if [ -d app/*management ] then for mscript in `ls -d app/*management` do ... done fi |
如果有一个匹配但是抛出错误"二元运算符预期",则可以工作。
有什么建议可以做到这一点吗?
在表达式中没有&&(和)的情况下,不能使用-d同时检查多个目录。我会用这个:
1 2 3 4 5 | for dir in app/*management; do if [[ -d $dir ]]; then ... fi done |
你应该使用globs而不是解析ls的输出。有关更多信息,请参阅以下链接:http://mywiki.wooledge.org/ParsingLs
在glob扩展到管理目录列表之后,
1 | if [ -d app/1management app/2management ] |
由于
您可以执行以下操作:
1 2 3 4 5 6 | for mscript in app/*management; do if [ ! -d $mscript ]; then continue fi ... done |
编辑:正如jordanm评论的那样,以下可能没有必要,但我会留在这里作为参考,因为
一个警告。如果app / *管理可能不会扩展为任何东西,则需要在循环之前设置shell选项
1 2 3 4 5 6 7 8 9 10 11 | if ! shopt nullglob; then setting_nullglob=1 shopt -qs nullglob fi for mscript in app/*management; do ... done if [ ${setting_nullglob:-0} = 1 ]; then unset setting_nullglob shopt -qu nullglob fi |
你为什么不这样做:
1 2 3 4 5 | for mscript in app/*management ; do if [ -d"$myscript" ] ; then ... fi done |