проверить, существует ли файл или каталог в Bash

Thank you for reading this post, don't forget to subscribe!

Если вы рабо­та­е­те над сце­на­ри­ем Bash, кото­рый вза­и­мо­дей­ству­ет с фай­ла­ми и ката­ло­га­ми, вы може­те столк­нуть­ся с ситу­а­ци­ей, когда вам нуж­но убе­дить­ся, что файл или ката­лог суще­ству­ет. Это помо­га­ет избе­жать воз­мож­ных оши­бок при выпол­не­нии опре­де­лен­ных дей­ствий с несу­ще­ству­ю­щим файлом.

В этой ста­тье мы пока­жем вам пару спо­со­бов про­ве­рить, суще­ству­ет ли файл или ката­лог в bash-скрип­те или нет. Давай­те нач­нем в первую оче­редь с файла.

 

Проверьте, существует ли файл в скрипте bash

Идея здесь состо­ит в том, что­бы исполь­зо­вать опе­ра­тор -f, кото­рый воз­вра­ща­ет исти­ну, толь­ко когда это обыч­ный файл (не каталог).

Допу­стим, вы хоти­те про­ве­рить, суще­ству­ет ли файл /home/user/my_file или нет. Вот как вы може­те про­ве­рить с помо­щью квад­рат­ных скобок

 

Но вы не все­гда полу­чи­те имя фай­ла зара­нее, не так ли? Вы може­те иметь его в пере­мен­ной, и если это так, вы може­те исполь­зо­вать его таким образом.

 

По сути, важ­но то усло­вие, кото­рое вы исполь­зу­е­те в коман­де if. Вам решать, как вы хоти­те исполь­зо­вать опе­ра­тор if. Напри­мер, вы може­те напи­сать это в двух квад­рат­ных скоб­ках, оста­вить «then» в той же стро­ке, как если бы, или поста­вить все выра­же­ние вме­сте с точ­ка­ми с запя­той сле­ду­ю­щим образом:

 

Проверьте файл существует в Bash с тестом

Вы так­же може­те исполь­зо­вать test в bash, что­бы уви­деть, суще­ству­ет файл или нет. Это почти то же самое, толь­ко то, что вы не исполь­зу­е­те квад­рат­ные скоб­ки в опе­ра­то­ре if:

 

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

 

Проверьте, не существует ли файл в скрипте bash

Что если все наобо­рот, и вы хоти­те про­ве­рить, не суще­ству­ет ли файл в bash? Вы може­те исполь­зо­вать в зна­чи­тель­ной сте­пе­ни тот же код, что и выше, исполь­зуя опе­ра­тор if:

 

Теперь, когда вы зна­е­те, как обра­щать­ся с фай­ла­ми, давай­те перей­дем к каталогам.

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

Код для про­вер­ки ката­ло­га такой же, как и в преды­ду­щем раз­де­ле. Раз­ни­ца лишь в том, что вы буде­те исполь­зо­вать -d вме­сто -f. -d воз­вра­ща­ет true толь­ко для каталогов.

 

Вы так­же може­те исполь­зо­вать тест здесь:

 

Проверьте, не существует ли каталог в bash

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