Як перевірити, чи існує каталог у командному рядку Linux?


28

Як перевірити, чи існує каталог у командному рядку Linux?

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


4
Тому позначте це як рішення.
BlueRaja - Danny Pflughoeft

Відповіді:


40
$ if test -d /the/dir; then echo "exist"; fi 

Мені це потрібно в командному рядку, а не в сценарії.

5
Це командний рядок. Ви можете ввести це в bash безпосередньо або можете відновити його test -d /the/dir: test -d /the/dir && echo "exist" || echo "does not exist"але вони дійсно ті самі.
Девід Родрігес - дрибес

Не всі оболонки є bash!
reinierpost

@reinierpost, тоді удачі вам ...
Стефано Борині

@Stefano Borini: Я все ще використовую, tcshтому що я лінивий, щоб переписати своє .tcshrc. Але більш до речі: це, можливо, пояснило проблему ОП.
reinierpost

11

Припустимо, що ваша оболонка - БАШ:

if [ -d /the/dir ]; then echo 'Exists'; else echo 'Not found'; fi

синтаксична помилка поблизу несподіваної лексеми `тоді '

Потім з’ясуйте, яка ваша оболонка. Можливо, cshчи tcsh?
reinierpost

8
[ -d /home/bla/ ] && echo "exits"

Чи можу я зробити щось на зразок ELSE, щоб показати текст, навіть якщо каталог не існує?

Обхід:[ -d /home/bla/ ] && echo "exist" ; [ ! -d /home/bla/ ] && echo "doesnt exist"
learningloop

7

Канонічним способом є використання утиліти test (1):

test -d path

де "шлях" - це ім'я шляху відповідного каталогу.


Здається, ця команда не виконує сама, але коли вона з'єднується з a echo "Directory Exists".
Еджаз

2

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

наприклад:

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

вихід буде: root dir.


[-d: команда не знайдена. Це те, що я отримую

Між "[" і "-" ПОВИНЕН бути пробілом. Це повинно працювати на оболонці Борна і Баша.

0

Щоб перевірити, чи існує каталог у скрипті оболонки, ви можете скористатися наступним:

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

щоб перевірити протилежне, додайте !перед-d ->[ ! -d ....]


Ласкаво просимо до Супер Користувача! Це дублює іншу відповідь і не додає нового вмісту. Будь ласка, не публікуйте відповіді, якщо у вас насправді є щось нове.
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.