Как проверить, существует ли каталог?

[114088] Вы говорите, что говорили с Хетцнером, который сказал, что у него есть программный RAID. Проблема в том, что его нет. Ваш [114441]cat /proc/mdstat[114442] говорит что-то вроде

, что означает отсутствие программного RAID. Если бы у вас был сломанный программный RAID, он выглядел бы как

Я получил его со своего сервера, так что некоторые детали для вас были бы другими, и я воссоздал его из записей во время последнего отказа HDD, так что некоторые детали могут быть неправильными, но важные биты -[114093]. [114094] [114443][114811][_U][114812] (это означает, что одно из зеркал не работает; если бы все было хорошо, то было бы сказано [114813][UU][114814]), и

(F)[114816] (что говорит о том, какая половина не работает, в данном случае это раздел на [114817]/dev/sdb[114818] в обоих случаях). Их собственные инструкции, на которые вы ссылаетесь, показывают нечто очень похожее.

  1. Если вы это увидели, то вставка нового жесткого диска в существующие массивы будет простым делом разбить новый диск на разделы и использовать [114447]mdadm[114448] для добавления разделов на зеркала. Но так как в настоящее время у вас есть система без RAID, мы не можем этого сделать.
  2. Я бы спросил у Hetzner, почему на ней нет программных RAID-массивов, со ссылкой на их собственную документацию. Может быть, им пришлось вырвать ссылки на MD RAID, чтобы вообще заставить систему загрузиться, но если это так, то при этом они испортили любую возможность, которую вам, возможно, пришлось бы восстанавливать RAID.
  3. Вы говорите, что вы "[114449]a TOTAL NEWBIE in Linux and hardware-related stuff [114450]". Честно говоря, если это так, то у тебя тут, наверное, не все в порядке с головой. Я бы обратился за профессиональной помощью, как только смог, и был бы готов к некоторому простоям во время резервного копирования системы, а затем восстанавливал бы ее полностью на чисто-ремонтированном и RAID-шасси[114103].
1
04.06.2015, 00:41
3 ответа

Ваш код работает, если каталог вы CD на самом деле существует.

Я изменил строку CD в каталог в моей системе (Diff):

-    cd ./bin/x86_64/bin/ls
+    cd /bin/

, затем RAN:

ry@~/Desktop:$ sh test /bin /
ok
/bin

Обратите внимание, что вы должны кормить свой скрипт два аргумента из-за этого: [$ # -EQ 2]; Затем

также обратите внимание, что . / Bin / на самом деле такой же, как Bin / .

0
27.01.2020, 23:15

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

if [[ -d "$1" ]]; then

Если вы хотите проверить любой файл, вы должны использовать

if [[ -e "$1" || -L "$1" ]]; then

Если вы хотите проверить, является ли файл обычным файлом (или символической ссылкой на обычный файл), но НЕ файлом каталога (или устройства, сокета, именованного канала ...), тогда вы можете использовать:

if [[ -f "$1" ]]; then

Если файл может существовать но вы хотите быть уверены, что это не нулевой размер:

if [[ -s "$1" ]] then;

Все эти тесты основаны на результате системного вызова stat () (за исключением -L , который полагается на lstat () ). Если у вас нет разрешения на такой вызов файла (например, потому что у вас нет доступа для поиска в каталоге, в котором находится файл, или в каталогах, участвующих в разрешении файла для символических ссылок), то эти тесты молча вернут false, как если бы файлы не существовали.

[[...]] - это оператор ksh , также поддерживаемый bash и zsh . Стандартный эквивалент (для использования в sh ) - это команда [ (для второго примера выше используйте [-e "$ 1"] || [-L " $ 1 "] ).

6
27.01.2020, 23:15

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

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

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

0
27.01.2020, 23:15

Теги

Похожие вопросы