检查目录是/ Library还是/ Public

时间:2012-12-20 23:14:48

标签: bash

我正在尝试编写一个bash脚本,该脚本占用用户主目录并遍历第一级子目录,并且仅当它们不是/ Library或/ Public文件夹时才对这些目录执行一些维护。到目前为止我的代码不起作用,因为我收到一条错误消息,说$ dir返回的目录名是一个目录。这是代码:

#!/bin/bash

user="short name"
source_root="/Users/"

source_use="$source_root$user"
cd "$source_use"

dirarr=( */ )

echo ${dirarr[@]}

for dir in "${dirarr[@]}"
do 
    if ( "$dir" -ne "/Library" -o "$dir" -ne "/Public")
        then echo $dir.
            # do something
    fi
done

任何人都可以帮我解决这个问题。

非常感谢

2 个答案:

答案 0 :(得分:1)

您的脚本有几个问题:

  1. 您需要在[ ]声明中使用[[ ]]if,而不是( )。在您的示例中,( )创建了一个子shell并尝试运行命令"$dir",这就是您收到错误消息的原因。

  2. 您正在与您找不到的字符串进行比较 - 请尝试使用"Library/""Public/"

  3. 您可能需要-a而不是-o

  4. -ne用于比较数字。你想要!=

  5. 以下是您的脚本的更正版本:

    #!/bin/bash
    
    user="short name"
    source_root="/Users/"
    
    source_use="$source_root$user"
    cd "$source_use"
    
    dirarr=( */ )
    
    echo ${dirarr[@]}
    
    for dir in "${dirarr[@]}"
    do 
        if [ "$dir" != "Library/" -a "$dir" != "Public/" ]
        then
            echo $dir.
            # do something
        fi
    done
    

答案 1 :(得分:1)

试试这个:

cd $source_root$user

for dir in `find . -maxdepth 1 -type d`
do
  if [ $dir = ./Library ] || [ $dir = ./Public ]
  then
    continue
  fi

  (Perform actions)
done

另外,bash是倒退的。 !=是字符串不相等,-ne是整数不相等。所以,也要改为等于标志。

祝你好运!