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

Как узнать, существует ли обычный файл в Bash?

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

какой правильный синтаксис использовать, если я хочу только проверить, делает ли файл не?

17 ответов

Тестирование Файлов Bash

как использовать:

вы можете отрицать выражение с помощью «!»:

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

стоит отметить, что если вам нужно выполнить одну команду можно сократить

Я предпочитаю делать следующий однострочный, в POSIX shell совместимый формат:

для нескольких команд, как я бы сделал в скрипте:

Как только я начал это делать,я редко использую полностью типизированный синтаксис!!

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

все тесты ниже применяются к обычным файлам, каталогам и символическим ссылкам:

вы должны быть осторожны при запуске test для некотируемой переменной, поскольку это может привести к неожиданным результатам:

рекомендация обычно состоит в том, чтобы тестируемая переменная была окружена двойными кавычками:

существуют три различных способа сделать это:

отрицание статуса выхода с bash (ни один другой ответ не сказал этого):

отрицание теста внутри команды test [ (именно так большинство ответов до этого представили):

действуйте на результат отрицательного теста ( || вместо && ):

вы можете сделать это:

короче говоря, это должно быть:

чтобы знать наверняка, что файл не существует, нам понадобится stat() системный вызов для возврата с кодом ошибки ENOENT ( ENOTDIR говорит нам, что один из компонентов пути не является каталогом, это еще один случай, когда мы можем сказать, что файл не существует по этому пути). К сожалению, [ команда не дает нам знать об этом. Он вернет false, является ли код ошибки ENOENT, EACCESS (разрешение отказано), ENAMETOOLONG или что-либо еще.

по крайней мере ls говорит мне, что это не потому, что файл не существует, что он терпит неудачу. Потому что он не может сказать, существует файл или нет. The [ команда просто проигнорировала проблему.

Источник

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

Главное меню » Операционная система Linux » Как проверить, существует ли файл или каталог в Bash

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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

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

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

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

Начать стоит с простого и более общего метода. Параметр -e позволяет определить, существует ли указанный объект. Не имеет значения, является объект каталогом или файлом.

Пример работы кода:

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

Вначале команда test проверяет параметром -e, существует ли Домашний каталог пользователя, название которого хранится системой в переменной $HOME. При отрицательном результате скрипт завершит работу с выводом сообщения об этом. Если такой каталог обнаружен, параметр продолжает проверку. На этот раз ищет в $HOME файл testing. И если он есть, то в него дописывается информация, иначе он создастся, и в него запишется новая строка данных.

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

Проверка файла Bash на то, является ли данный объект файлом (то есть существует ли файл), выполняется с помощью параметра -f.

Пример работы кода:

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

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

На заметку: на практике предпочтительнее использовать сначала проверку на наличие объекта как такового, а затем — на его конкретный тип. Так можно избежать различных ошибок или неожиданных результатов работы программы.

Проверка файла на пустоту

Чтобы определить, является ли файл пустым, нужно выполнить проверку с помощью параметра -s. Это особенно важно, когда файл намечен на удаление. Здесь нужно быть очень внимательным к результатам, так как успешное выполнение этого параметра указывает на наличие данных.

Результат работы программы:

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

В этом скрипте файл создаётся командой touch, и при первой проверке на пустоту возвращается отрицательный результат. Затем в него записываются данные в виде команды date, после чего повторная проверка файла возвращает истину.

Выводы

Источник

Bash: Test If File Exists

While creating a bash script, it is commonly helpful to test if file exists before attempting to perform some action with it.

This is a job for the test command, that allows to check if file exists and what type is it.

As only the check is done – the test command sets the exit code to 0 ( TRUE ) or 1 ( FALSE ), whenever the test succeeded or not.

Also the test command has a logical “not” operator which allows to get the TRUE answer when it needs to test if file does not exist.

Cool Tip: Create a clever bash script! Make it do more tests! Check easily whether a string exists in a file! Read more →

Bash Shell: Test If File Exists

Run one of the below commands to check whether a file exists:

Test if the file /etc/passwd exist ( TRUE ):

Test if the file /etc/bebebe exist ( FALSE ):

Test if the file /etc/bebebe does not exist ( TRUE ):

If File Exists, Then …

We usually test if a file exists to perform some action depending on the result of the test.

Maybe if file doesn’t exist – there is no sens to move forward and it is required to break the script or whatever.

In the examples below, lets print corresponding messages depending on the results of the test command.

Test if the file /etc/passwd exists and print a message if it is TRUE :

Test if the file /etc/bebebe does not exist and print a message if it is TRUE :

Test if the file exists and print a corresponding message in the each case:

Bash Script: Test If File Exists

Create an empty checkfile.sh file with the touch checkfile.sh command.

Open the checkfile.sh with a text editor and put the following code:

Cool Tip: A good bash script prints usage and exits if arguments are not provided! It is very simple to configure! Read more →

Save and execute the script as follows:

Test If File Exists And It Is …

Here are some other useful options that can help to check whether a “file” exists and has specific permissions or it is a symbolic link, socket or a directory:

OptionDescription
-eTest if file exists, regardless of type (directory, socket, etc.)
-fTest if file exists and is a regular file
-rTest if file exists and read permission is granted
-wTest if file exists and write permission is granted
-xTest if file exists and execute permission is granted
-LTest if file exists and is a symbolic link
-STest if file exists and is a socket
-dTest if directory exists

Run man test to see all available operators.

Источник

How do I tell if a regular file does not exist in Bash?

I’ve used the following script to see if a file exists:

What’s the correct syntax to use if I only want to check if the file does not exist?

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

20 Answers 20

The test command ( [ here) has a «not» logical operator which is the exclamation point (similar to many other languages). Try this:

Bash File Testing

How to use:

You can negate an expression with «!»:

Also, it’s possible that the file is a broken symbolic link, or a non-regular file, like e.g. a socket, device or fifo. For example, to add a check for broken symlinks:

It’s worth mentioning that if you need to execute a single command you can abbreviate

I prefer to do the following one-liner, in POSIX shell compatible format:

For a couple of commands, like I would do in a script:

Once I started doing this, I rarely use the fully typed syntax anymore!!

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

To test file existence, the parameter can be any one of the following:

All the tests below apply to regular files, directories, and symlinks:

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

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

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

You should be careful about running test for an unquoted variable, because it might produce unexpected results:

The recommendation is usually to have the tested variable surrounded by double quotation marks:

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

In short, it should be:

To know for sure that the file doesn’t exist, we’d need the stat() system call to return with an error code of ENOENT ( ENOTDIR tells us one of the path components is not a directory is another case where we can tell the file doesn’t exist by that path). Unfortunately the [ command doesn’t let us know that. It will return false whether the error code is ENOENT, EACCESS (permission denied), ENAMETOOLONG or anything else.

At least ls tells me it’s not because the file doesn’t exist that it fails. It’s because it can’t tell whether the file exists or not. The [ command just ignored the problem.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *