Bash - 检查子目录是否包含文件夹

时间:2018-01-12 20:45:36

标签: bash

我要做的是:

我希望主文件夹中的每个目录都包含一个共享文件夹,我将放置一些共享文件供所有人阅读。我还将共享文件夹存储在家中。目录结构如下所示:

home
---user1
------shared
------someFolder
---user2
------someFolder
---shared

我想确保我没有在其内部插入共享文件夹的链接。我还想检查文件夹是否有指向共享文件夹的链接。如果它已经有链接,那么什么也不做。如果它没有链接,那么创建一个。

这是我的代码:

for d in */ ; do
    if [ "$d" != "shared/" ]
    then
        shared_exists=false
        for e in "$d"*/; do
            #echo "$e"
            if [ "$e" = $d"shared/" ]
            then
                shared_exists=true
            fi
        done
        if [ "$shared_exists" = true ]
        then
            echo "shared exists in $d"
        else
            echo "Shared does not exist in $d"
            sudo ln -s /home/shared/ /home/"$d"
        fi
    fi
done

这是正确的方式还是有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

您可以将该代码重构为这么短的代码:

shopt -s extglob nullglob
cd /home

for d in !(shared)/; do
    [[ ! -e "$d"shared ]] && ln -s "$PWD/shared" "$d"shared
done