2015-08-18 3 views
0

У меня есть символическая связьКак проверить, если символическая, а также каталог существует в Linux

data -> /application/madat/gold/gold_lock/Methods96/../data 

Я хотел бы проверить, если символическая существует и существует каталог с помощью сценария оболочки.

Я попытался это:

#!/bin/bash 
if [[ -h data && data -ef application/madat/gold/gold_lock/Methods96/../data ]]; then echo it exists; else echo it does not; fi 

Но оленья кожа работа ..

Любой свинец ценится.

+0

'readlink' и' readlink -f' могут быть полезны –

ответ

4

Вы можете попробовать что-то вроде этого

if [[ -L "data" && -d "$(readlink data)" ]]; then 
    echo "both exists" 
else 
    echo "symlink or directory does not exist" 
fi 

-L будет проверить, если это символическое, то -d будет выглядеть, если существует каталог за линком.

Если могут быть другие символические ссылки в пути каталога, используйте readlink -f

Обновление: забыл сказать, что -h и -L эквивалентны, но я считаю, второй легче запомнить. Это было проверено на ubuntu, кстати.

+0

На самом деле, у него нет символической ссылки, где меняется только цвет, подобный золоту. и ваш код не дает вывода – cloudbud

+0

Im using centos – cloudbud

+0

он должен быть таким же на centos (у меня нет доступа к одному). Я обновил часть 'else'. Это ты имел в виду? Я только что проверил это снова. Если обновленная версия не в порядке, можете ли вы еще раз объяснить, в чем проблема? – tgo

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