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


28

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

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


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.


[-d: команда не найдена, это то, что я получаю

Между "[" и "-" ДОЛЖЕН быть пробел. Это должно работать на Bourne и Bash.

0

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

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

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


Добро пожаловать в Супер пользователя! Это дублирует другой ответ и не добавляет новый контент. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового.
ДэвидПостилл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.