2015-02-05 6 views
1

Я пытаюсь написать сценарий оболочки, который проверяет, содержит ли данный каталог специально названный подкаталог. Я передаю родительский каталог как первый аргумент и только имя дочернего каталога. Я хочу, чтобы скрипт прошел через содержимое родителя и посмотрел, содержит ли он файл типа directory, который называется с именем, которое я передаю для Child.Проверьте, содержит ли каталог конкретный подкаталог

Это мой код. В нем я пытаюсь передать вывод ls на родительский элемент в команду egrep. Я пытаюсь написать регулярное выражение, которое проверяет, имеет ли вывод ls имя, которое совпадает (не идентично, только где-то в его имени) мое дочернее имя.

PARENT=$1 
CHILD=$2 

DIRNUM=$(ls -l $PARENT | egrep -c '< $CHILD >') 
echo $DIRNUM 

ответ

3

Не делайте этого. Don't parse ls.

Просто проверьте файл/каталог непосредственно с помощью встроенной/команды [/test.

path=$parent/$child 
if [ -d "$path" ]; then 
    echo "$path exists." 
else 
    echo "$path does not exist." 
fi 

Вы заметите, что я заменил регистр на имена переменных. Переменные ALL_UPPER «зарезервированы» для использования оболочки, вы не должны использовать их.

+0

Добавить слэш в пути, чтобы убедиться, что это действительно каталог (а не файл). Или используйте -d тест, а не -e. – jwatkins

+0

Вы можете сотрудничать немного дальше о том, как это работает? –

+0

@jwatkins Действительно. Я пропустил часть «ребенок - это каталог» в OP. –

1

Используйте команды поиска как следующее:

вариант
# find $parent -name \*${child}\* -and -type d 

Тип должен гарантировать, что найденное имя каталога.

Эта команда найдет все поддиректории, расположенные в пределах $ родителя, которые содержат $ ребенка в его названии