- Как проверить, существует ли файл или каталог в Bash
- How to Check if a File or Directory Exists in Bash
- В Bash вы можете использовать тестовую команду, чтобы проверить, существует ли файл и определить тип файла.
- Проверьте, существует ли файл
- Проверьте, существует ли каталог
- Проверьте, не существует ли файл
- Проверьте, существует ли несколько файлов
- Операторы проверки файлов
- Вывод
- Как проверить, существует ли файл или каталог в Bash
- Проверьте, существует ли файл
- Проверить, существует ли каталог
- Проверьте, не существует ли файла
- Проверьте, существует ли несколько файлов
- Операторы проверки файлов
- Выводы
- C++ — определение, существует ли каталог (не файл) в Linux [дубликат]
- 6 ответов
- Как проверить наличие файла или каталога в R, Python и Bash?
- Проверка наличия файла или каталога в R
- Как проверить наличие файла?
- Как проверить наличие каталога?
- Проверка наличия файла или каталога в Python
- Как проверить наличие файла?
- Как проверить наличие каталога?
- Проверка наличия файла или каталога в Bash
- Как проверить наличие файла?
- Как проверить наличие каталога?
Как проверить, существует ли файл или каталог в 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 — Истина, если ФАЙЛ существует и является исполняемым.
Вывод
В этом руководстве мы показали, как проверить, существует ли файл или каталог в 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 — Истина, если ФАЙЛ существует и является исполняемым.
Выводы
В этом руководстве мы показали вам, как проверить, существует ли файл или каталог в 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 имеют ужасный послужной список, вызывающий таинственные поломка при обновлении общей библиотеки без перекомпиляции приложения или даже если вам просто не удалось скомпилировать приложение с помощью ровно те же флаги, используемые для компиляции разделяемой библиотеки. Техническое обслуживание просто не стоит того.
В C++17**, std::filesystem предоставляет два варианта для определения существования пути:
- is_directory() определяет, является ли путь каталогом и существует ли в фактической файловой системе
- 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 — проверка, является ли файл исполняемым.
Источник