Как проверить, существует ли каталог в командной строке Linux?

28

Как проверить, существует ли каталог в командной строке Linux?

Решение: [ -d ¨a¨ ]&&echo ¨exists¨||echo ¨not exists¨

StudioHack
источник
4
Так отметьте это как решение.
BlueRaja - Дэнни Пфлюгофт

Ответы:

40
$ if test -d /the/dir; then echo "exist"; fi 
Стефано Борини
источник
Мне это нужно в командной строке, а не в скрипте.
5
Это командная строка. Вы можете ввести , что в Баш непосредственно, или вы можете возобновить его test -d /the/dir: test -d /the/dir && echo "exist" || echo "does not exist"но они на самом деле то же самое.
Дэвид Родригес - dribeas
Не у всех такая оболочка bash!
reinierpost
@reinierpost тогда удачи тебе ...
Стефано Борини
@ Стефано Борини: Я все еще использую, tcshпотому что мне лень переписывать мои .tcshrc. Но более важно: это могло бы объяснить проблему ОП.
reinierpost
11

Предполагая, что ваша оболочка BASH:

if [ -d /the/dir ]; then echo 'Exists'; else echo 'Not found'; fi
Брайан Шоуолтер
источник
синтаксическая ошибка рядом с неожиданным токеном `then '
Тогда выясни, какая у тебя оболочка. Возможно cshили tcsh?
reinierpost
8
[ -d /home/bla/ ] && echo "exits"

источник
Могу ли я иметь что-то вроде ELSE, чтобы показать текст, даже если каталог не существует?
Обходной путь:[ -d /home/bla/ ] && echo "exist" ; [ ! -d /home/bla/ ] && echo "doesnt exist"
Изучение
7

Каноническим способом является использование утилиты test (1):

test -d path

где «путь» - это путь к каталогу, о котором идет речь.

Стив Эммерсон
источник
Команда выполняется не сама по себе, а в сочетании с echo "Directory Exists".
Ejaz
2

[ -d "YOUR_DIR" ] && echo "is a dir"

например:

[ -d / ] && echo "root dir"

выход будет: root dir.

Ejaz
источник
[-d: команда не найдена, это то, что я получаю
Между "[" и "-" ДОЛЖЕН быть пробел. Это должно работать на Bourne и Bash.
0

Чтобы проверить, существует ли каталог в сценарии оболочки, вы можете использовать следующее:

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

чтобы проверить обратное, добавьте !перед-d ->[ ! -d ....]

roval
источник
Добро пожаловать в Супер пользователя! Это дублирует другой ответ и не добавляет новый контент. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового.
ДэвидПостилл