2015-02-05 4 views
2

Как проверить, содержит ли данный каталог другой каталог в оболочке. Я хочу передать 2 полных каталога путей. (Я знаю, что это глупо, но только для учебных целей). Затем я хочу посмотреть, содержится ли какой-либо из этих двух путей в другом.проверить, содержит ли каталог другой каталог

parent=$1 
child=$2 

if [ -d $child ]; then 
    echo "YES" 
else 
    echo "NO" 
fi 

это, однако, не использует родительский каталог. Проверяет только наличие ребенка.

+0

Вы хотите увидеть, если '$ parent' является родителем' $ child' на каком-то уровне? Это проверка префикса строки (если вы не беспокоитесь о символических ссылках, '../' играх и т. Д.). –

+0

Используйте 'find -type d -name '$ child" '. – Barmar

ответ

2

Вы можете использовать find, чтобы увидеть, если одно имя содержится в другом:

result=$(find "$parent" -type d -name "$child") 
if [[ -n $result ]] 
then echo YES 
else echo NO 
fi 
0

Вы можете сделать это в чистом Баш. Цикл по каждому файл в $ 1 и посмотреть, если «$ 1/$ 2» является режем, например, так:

parent=$1 
child=$(basename $2) 
if [ -d $parent ] && [ -d $child ]; then 
    for child in $parent; do 
     if [ -d "$parent/$child" ]; then 
      echo "Yes" 
     else 
      echo "No" 
     fi 
    done 
fi 
+0

Причина, по которой это не будет работать, заключается в том, что во втором случае, если вы статируете, вы добавляете весь дочерний путь к родительскому пути. Это приводит к несуществующей директории, и это всегда приведет к НЕТ. –

+0

@ Kanny Bros, используйте 'child = $ (basename $ 2)', если вам нужно только имя папки '$ child' вместо его абсолютного пути. – MeetTitan

Смежные вопросы