Linux проверить существование папки

Содержание
  1. Как проверить, существует ли файл или каталог в Bash
  2. How to Check if a File or Directory Exists in Bash
  3. В Bash вы можете использовать тестовую команду, чтобы проверить, существует ли файл и определить тип файла.
  4. Проверьте, существует ли файл
  5. Проверьте, существует ли каталог
  6. Проверьте, не существует ли файл
  7. Проверьте, существует ли несколько файлов
  8. Операторы проверки файлов
  9. Вывод
  10. Как проверить, существует ли файл или каталог в Bash
  11. Проверьте, существует ли файл
  12. Проверить, существует ли каталог
  13. Проверьте, не существует ли файла
  14. Проверьте, существует ли несколько файлов
  15. Операторы проверки файлов
  16. Выводы
  17. C++ — определение, существует ли каталог (не файл) в Linux [дубликат]
  18. 6 ответов
  19. Как проверить наличие файла или каталога в R, Python и Bash?
  20. Проверка наличия файла или каталога в R
  21. Как проверить наличие файла?
  22. Как проверить наличие каталога?
  23. Проверка наличия файла или каталога в Python
  24. Как проверить наличие файла?
  25. Как проверить наличие каталога?
  26. Проверка наличия файла или каталога в Bash
  27. Как проверить наличие файла?
  28. Как проверить наличие каталога?

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

How to Check if a File or Directory Exists in Bash

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

Во многих случаях при написании сценариев Shell вы можете оказаться в ситуации, когда вам нужно выполнить действие, основанное на том, существует файл или нет.

Команда test принимает одну из следующих синтаксических форм:

Если вы хотите, чтобы ваш скрипт был переносимым, вам следует использовать старую [ команду test , которая доступна во всех оболочках POSIX. Новая обновленная версия команды test [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

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

При проверке существования файла чаще всего используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от его типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (не каталогом или устройством).

Наиболее читаемым вариантом при проверке существования файла является использование test команды в сочетании с if оператором . Любой из фрагментов ниже проверит, /etc/resolv.conf существует ли файл:

Вы также можете использовать команду test без оператора if. Команда после && оператора будет выполнена только в том случае, если статус выхода тестовой команды равен true,

Напротив && , оператор после || оператора будет выполняться только в том случае, если статус выхода команды test равен false .

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

Операторы -d позволяют проверить, является ли файл каталогом или нет.

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

Вы также можете использовать двойные скобки [[ вместо одной [ .

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

Как и во многих других языках, тестовое выражение можно отменить, используя ! логический оператор not (восклицательный знак):

То же, что и выше:

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

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:

Операторы проверки файлов

Команда test включает в себя следующие операторы FILE, которые позволяют вам тестировать определенные типы файлов:

  • -b FILE — Истина, если ФАЙЛ существует и является специальным файлом блока.
  • -c FILE — Истина, если ФАЙЛ существует и является файлом специальных символов.
  • -d FILE — Истина, если ФАЙЛ существует и является каталогом.
  • -e FILE — Истина, если ФАЙЛ существует и является файлом, независимо от его типа (узел, каталог, сокет и т. Д.).
  • -f FILE — Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
  • -G FILE — Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
  • -h FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -g FILE — Истина, если ФАЙЛ существует и установлен sgid флаг set -group-id ( ).
  • -k FILE — Истина, если ФАЙЛ существует и установлен флаг закрепления битов.
  • -L FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -O FILE — Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
  • -p FILE — Истина, если ФАЙЛ существует и является каналом.
  • -r FILE — Истина, если ФАЙЛ существует и доступен для чтения.
  • -S FILE — Истина, если ФАЙЛ существует и является сокетом.
  • -s FILE — Истина, если ФАЙЛ существует и имеет ненулевой размер.
  • -u FILE — Истина, если ФАЙЛ существует и установлен suid флаг set-user-id ( ).
  • -w FILE — Истина, если ФАЙЛ существует и доступен для записи.
  • -x FILE — Истина, если ФАЙЛ существует и является исполняемым.
Читайте также:  Linux sockets connection refused

Вывод

В этом руководстве мы показали, как проверить, существует ли файл или каталог в Bash.

Источник

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

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

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

Команда test принимает одну из следующих синтаксических форм:

Если вы хотите, чтобы ваш сценарий был переносимым, вам следует предпочесть старую команду test [ , которая доступна во всех оболочках POSIX. Новая обновленная версия тестовой команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

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

При проверке существования файла наиболее часто используются операторы FILE -e и -f . Первый проверит, существует ли файл независимо от типа, а второй вернет истину, только если ФАЙЛ является обычным файлом (а не каталогом или устройством).

Наиболее удобочитаемый вариант при проверке существования файла — использование команды test в сочетании с оператором if . Любой из приведенных ниже фрагментов проверит, существует ли файл /etc/resolv.conf :

Если вы хотите выполнить другое действие в зависимости от того, существует файл или нет, просто используйте конструкцию if / then:

Вы также можете использовать команду test без оператора if. Команда после оператора && будет выполнена только в том случае, если статус выхода тестовой команды — истина,

Если вы хотите запустить серию команд после оператора && просто заключите команды в фигурные скобки, разделенные ; или && :

Напротив && , оператор после || Оператор будет выполняться только в том случае, если статус выхода тестовой команды false .

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

Операторы -d позволяют вам проверить, является ли файл каталогом или нет.

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

Вы также можете использовать двойные скобки [[ вместо одинарной [ .

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

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

То же, что и выше:

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

Вместо использования сложных вложенных конструкций if / else вы можете использовать -a (или && с [[ ), чтобы проверить, существует ли несколько файлов:

Эквивалентные варианты без использования оператора IF:

Операторы проверки файлов

Команда test включает в себя следующие операторы FILE, которые позволяют проверять файлы определенных типов:

  • -b FILE — Истина, если ФАЙЛ существует и является специальным блочным файлом.
  • -c FILE — Истина, если ФАЙЛ существует и является файлом специальных символов.
  • -d FILE — Истина, если ФАЙЛ существует и является каталогом.
  • -e FILE — Истина, если ФАЙЛ существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
  • -f FILE — Истина, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
  • -G FILE — Истина, если ФАЙЛ существует и имеет ту же группу, что и пользователь, выполняющий команду.
  • -h FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -g FILE — Истина, если ФАЙЛ существует и для него установлен флаг set-group-id ( sgid ).
  • -k FILE — Истина, если ФАЙЛ существует и для него установлен флаг липкого бита.
  • -L FILE — Истина, если ФАЙЛ существует и является символической ссылкой.
  • -O FILE — Истина, если ФАЙЛ существует и принадлежит пользователю, выполняющему команду.
  • -p FILE — Истина, если ФАЙЛ существует и является каналом.
  • -r FILE — Истинно, если ФАЙЛ существует и доступен для чтения.
  • -S FILE — Истина, если ФАЙЛ существует и является сокетом.
  • -s FILE — Истина, если ФАЙЛ существует и имеет ненулевой размер.
  • -u FILE — Истинно, если ФАЙЛ существует и установлен флаг set-user-id ( suid ).
  • -w FILE — Истина, если ФАЙЛ существует и доступен для записи.
  • -x FILE — Истина, если ФАЙЛ существует и является исполняемым.
Читайте также:  Добавление нового устройства windows

Выводы

В этом руководстве мы показали вам, как проверить, существует ли файл или каталог в Bash.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

C++ — определение, существует ли каталог (не файл) в Linux [дубликат]

этот вопрос уже есть ответ здесь:

Как определить, существует ли каталог (а не файл) с использованием C++ в Linux? Я попытался использовать функцию stat (), но она вернулась положительной, когда файл был найден. Я только хочу найти, если inputted строка-это каталог, а не что-то другое.

6 ответов

по данным man (2) stat вы можете использовать макрос S_ISDIR в поле st_mode:

примечание, Я бы рекомендовал использовать Boost и / или Qt4, чтобы упростить кросс-платформенную поддержку, если ваше программное обеспечение может быть жизнеспособным на других ОС.

Как насчет того, что я нашел здесь

или с помощью stat

Если вы можете проверить повысить библиотеку файловой системы. Это отличный способ справиться с такого рода проблемами в общем и переносимым способом.

в этом случае достаточно будет использовать:

как я понимаю, ваш вопрос таков: у вас есть путь, скажем, /foo/bar/baz (баз-файл), и вы хотите знать, является ли . Если да, то решение выглядит примерно так (непроверено):

если вы хотите узнать, существует ли каталог, потому что вы хотите сделать что-то с ним, если это так (создать файл/каталог внутри, сканировать его содержимое и т. д.), Вы должны просто идти вперед и делать все, что хотите, а затем проверить, не удалось ли это, и если да, сообщите strerror(errno) для пользователя. Это общий принцип программирования в Unix: не пытайтесь выяснить, будет ли работать то, что вы хотите сделать. Попробуй, а потом проверь, не провалилось ли.

если вы хотите вести себя особенно если что-то не удалось, потому что каталог не существует (например, если вы хотите создать файл и все необходимые содержащих каталоги) проверки errno == ENOENT после open не удается.

Я вижу, что один ответчик рекомендуем использовать boost::filesystem . Я бы как утвердить эту рекомендацию, но, к сожалению, я не могу, потому что boost::filesystem не только заголовок, и все модули без заголовка Boost имеют ужасный послужной список, вызывающий таинственные поломка при обновлении общей библиотеки без перекомпиляции приложения или даже если вам просто не удалось скомпилировать приложение с помощью ровно те же флаги, используемые для компиляции разделяемой библиотеки. Техническое обслуживание просто не стоит того.

Читайте также:  Windows 10 yellow wallpaper

В C++17**, std::filesystem предоставляет два варианта для определения существования пути:

  1. is_directory() определяет, является ли путь каталогом и существует ли в фактической файловой системе
  2. exists() просто определяет, существует ли путь в реальной файловой системе (не проверяя, является ли это каталогом)

пример (без обработки ошибок):

обе функции throw filesystem_error в случае ошибки. Если вы хотите избежать перехвата исключений, используйте перегруженные варианты с std::error_code как второй параметр.

Источник

Как проверить наличие файла или каталога в R, Python и Bash?

Проверка наличия файла или каталога в R

Для этого примера мы создали файл myfile.txt и каталог my_test_folder .

Как проверить наличие файла?

Наличие файла легко проверить с помощью команды file.exists() из базового пакета. Посмотрите следующий пример:

Попробуем теперь с файлом, которого не существует:

Обратите внимание, что выражение if not file exists записывается также и с добавлением ! внутри оператора if вот таким образом:

Кроме того, при необходимости создать пустой файл выполняется такая команда:

Как проверить наличие каталога?

По аналогии с проверкой наличия файла, при которой используется file.exists() , наличие каталогов проверяется с помощью команды dir.exists() . Например:

Теперь выполним следующее упражнение. Проверим, есть ли каталог. Если его нет, создадим новый:

Папка my_new_folder создается в нашем рабочем каталоге.

Проверка наличия файла или каталога в Python

Для этого примера опять же используем файл myfile.txt и каталог my_test_folder .

Как проверить наличие файла?

Здесь мы будем работать с модулем os :

Кроме того, здесь задействуется модуль pathlib :

В Python есть возможность создать пустой файл с помощью команды with open(filename.txt, ‘w’) . Например:

При открытии файла помните о следующих режимах:

Как проверить наличие каталога?

Это, опять же, аналогично проверке наличия файла:

Каталог создается следующим образом:

Чтобы проверить, существует ли объект Path независимо или является файлом/каталогом, используется exists() :

Или с помощью модуля os :

Проверка наличия файла или каталога в Bash

Как проверить наличие файла?

Для этого примера снова используем файл myfile.txt и каталог my_test_folder . Здесь мы будем работать с флагом -f , с помощью которого проверяется наличие обычного файла, а не каталога.

Задействуем скрипт mycheck.sh , который выглядит следующим образом:

Как и ожидалось, файл существует. Теперь при необходимости создать пустой скрипт выполняется такая команда:

Как проверить наличие каталога?

Здесь используем флаг -d . Задействуем скрипт dircheck.sh :

Мы получили сообщение о том, что каталог существует.

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

Отметим также, что выражение if not содержит символ ! :

И в завершение приведем перечень необходимых флагов для проверки файлов и каталогов в Bash:

  • -b filename — блочный файл устройств.
  • -c filename — символьный файл устройств.
  • -d directoryname — проверка наличия каталога.
  • -e filename — проверка наличия файла независимо от типа (узел, каталог, сокет и т. д.).
  • -f filename — проверка наличия обычного файла, а не каталога.
  • -G filename — проверка, существует ли файл и принадлежит ли он эффективному идентификатору группы.
  • -G filename set-group-id — True , если файл существует и у него set-group-id (установка идентификатора группы во время выполнения).
  • -k filename — дополнительный атрибут и специальный тип разрешений файла/каталога Sticky bit.
  • -L filename — символическая ссылка.
  • -O filename — True , если файл существует и принадлежит эффективному идентификатору пользователя.
  • -r filename — проверка, доступен ли файл для чтения.
  • -S filename — проверка, является ли файл сокетом.
  • -s filename — проверка ненулевого размера файла.
  • -u filename — проверка, установлен ли для файла бит set-user-id (установка идентификатора пользователя во время выполнения).
  • -w filename — проверка, доступен ли файл для записи.
  • -x filename — проверка, является ли файл исполняемым.

Источник

Оцените статью