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

Опубликовано: 1 Октября, 2022

В этой статье мы напишем bash-скрипт для проверки существования файлов.

Синтаксис:

  • тест [выражение]
  • [ выражение ]
  • [[ выражение ]]

Здесь в выражении пишем параметр и имя файла . Давайте посмотрим на некоторые параметры, которые можно использовать в выражении: –

  • f: возвращает True, если файл существует как обычный (обычный) файл.
  • -d : возвращает True, если каталог существует.
  • -e : возвращает True, если существует файл любого типа.
  • -c : возвращает True, если файл символов существует.
  • -r : возвращает True, если существует читаемый файл.
  • w : возвращает True, если существует файл, доступный для записи .
  • -x : возвращает True, если исполняемый файл существует.
  • -p : возвращает True, если файл существует в виде канала.
  • -S : возвращает True, если файл существует как сокет.
  • -s : возвращает True, если файл существует и размер файла не равен нулю.
  • -L : возвращает True, если файл символической ссылки существует .
  • -g : возвращает True, если файл существует и установлен флаг идентификатора группы удержания.
  • -G : возвращает True, если файл существует и содержит тот же идентификатор группы, что и в процессе.
  • -k : возвращает True, если файл существует и установлен флаг sticky bit.

Теперь есть еще несколько параметров для сравнения двух файлов.

  • -ef: возвращает True, если оба файла существуют и указывают на один и тот же файл.

Пример :

FirstFile -ef SecondFile
  • -nt: возвращает True, если FirstFile новее, чем Secondfile.

Пример :

FirstFile -nt FileOld
  • -ot: возвращает True, если FirstFile старше, чем SecondFile.

Пример:

FirstFile -ot SecondFile

Давайте возьмем несколько примеров на основе синтаксиса:

  • [выражение]: сначала создайте файл с именем «FirstFile.sh» и напишите в нем следующий скрипт
#!/bin/bash

# using [ expression ] syntax and in place 
# of File.txt you can write your file name 
if [ -f "File.txt" ]; 
then

# if file exist the it will be printed 
echo "File is exist"
else

# is it is not exist then it will be printed
echo "File is not exist"
fi

Теперь сохраните и запустите файл, используя следующую команду

$ chmod +x ./FirstFile.sh
$ ./FirstFile.sh

Выход :

Примечание. Поскольку файл «File.txt» присутствует в системе. Итак, он напечатал «Файл существует».

  • test [выражение]: теперь измените приведенный выше скрипт в «FirstFile.sh» следующим образом.
#!/bin/bash

# using test expression syntax and in place 
# of File2.txt you can write your file name
if test -f "File2.txt" ;
then

# if file exist the it will be printed 
echo "File is exist"
else

# is it is not exist then it will be printed
echo "File is not exist"
fi

Теперь снова сохраните и запустите файл, используя следующую команду

$ chmod +x ./FirstFile.sh
$ ./FirstFile.sh

Выход :

Примечание. Поскольку «File2.txt» отсутствует в системе. Итак, он напечатал «Файл не существует».

  • [[выражение]]: снова измените приведенный выше скрипт в «FirstFile.sh» следующим образом.
#!/bin/bash

# using [[ expression ]] syntax and in place 
# of File3.txt you can write your file name
if test -f "File3.txt" ;
then

# if file exist the it will be printed 
echo "File is exist"
else

# is it is not exist then it will be printed
echo "File is not exist"
fi

Теперь снова сохраните и запустите файл, используя следующую команду

$ chmod +x ./FirstFile.sh
$ ./FirstFile.sh

Выход :

Примечание. Поскольку файл «File3.txt» присутствует в системе. Итак, он напечатал «Файл существует».

Давайте посмотрим на пример, основанный на параметрах:

  • Используя параметр -d: создайте файл с именем «FirstDir.sh». » и пишем в нем следующий скрипт
!/bin/bash
if [[ -d "GFG_dir" ]] ; # Here GFG_dir
 is directory and in place of GFG_dir you can write your Directory name
then
echo "Directory is exist" # If GFG_dir exist then it will be printed
else
echo "Directory is not exist" # If GFG_dir is not exist then it will be printed
fi

Теперь сохраните и запустите файл, используя следующую команду

$ chmod +x ./FirstDir.sh
$ ./FirstDir.sh

Выход :

Примечание. Поскольку в системе присутствует «GFG_dir». Итак, он напечатал «Каталог существует».

Точно так же вы можете использовать -f , -e , -w , -r , -c и т. д. (в соответствии с их использованием) вместо -d для проверки существования различных типов файлов.

Давайте посмотрим на пример, основанный на сравнении двух файлов:

  • Использование параметра -nt

Создайте имя файла «Comparison_File.sh» и напишите следующий скрипт

#!/bin/bash

# New_file.txt and Old_File.txt are names of two files.
if [[ "New_File.txt" -nt  "Old_File.txt" ]] ;
then

# This will be printed if Condition is true
echo "New_File.txt is newer than Old_File.txt" 
else

# This will be printed if Condition is False
echo "New_File.txt is not newer than Old_File.txt"
fi

Теперь сохраните и запустите файл, используя следующую команду

$ chmod +x ./Comparison_File.sh
$ ./Comparison_File.sh

Выход :

Примечание. Поскольку оба файла присутствуют в системе, а «New_File.txt» новее, чем «Old_File.txt».

Давайте посмотрим на пример «Проверить, не существует ли файл»:

Создайте файл с именем «Check_Exist.sh». » и пишем в нем следующий скрипт

#!/bin/bash

# using ! before -f parameter to check if 
# file does not exist
if [[ ! -f "GFG.txt" ]] ;
then

# This will printed if condition is True
echo "File is not exist"
else

# This will be printed if condition if False
echo "File is exist"
fi

Теперь сохраните и запустите файл, используя следующую команду

$ chmod +x ./Check_Exist.sh
$ ./Check_Exist.sh

Выход :

Примечание. «GFG.txt» отсутствует в системе. Итак, он напечатает «Файл не существует»

Давайте посмотрим на пример без использования условия If-else:

Создайте файл с именем «Geeks_File.sh» и напишите в нем следующий скрипт

#!/bin/bash

# If File exist then first statement will be
# printed and if it is not exist then 2nd
# statement will be printed.
[ -f "GFG_File.txt" ] && echo "File is exist" || echo "File is not exist"

Теперь сохраните и запустите файл, используя следующую команду

$ chmod +x ./Geeks_File.sh
$ ./Geeks_File.sh

Выход :

Примечание. Поскольку файл «GFG_File.txt» присутствует в системе. Итак, он напечатал «Файл существует».