Я запутался между двумя тегами, которые можно использовать в операторе if
в скриптах bash.
Один из них -f
, а другой - -a
.
Их описание гласит следующее:
[ -f FILE ] True if FILE exists and is a regular file.
[ -a FILE ] True if FILE exists.
Теперь, используя условие if в моем сценарии оболочки, как я могу узнать, какой тег использовать. Как у меня есть сценарий, который выполняет регулярное резервное копирование с использованием tar
и создает файл file-name.tar.gz
, так как я могу узнать, какой файл является обычным. Благодаря.
Для файлов tar - и в основном для любого другого файла, который вы создаете - -f
- правильный выбор.
-a
предназначен для специальных файлов, таких как узлы устройств, fifos и тому подобное, которые в соответствии с философией Unix Все представляет собой файл , представленные в виде файлов в вашей файловой системе.
Обычные файлы - это текстовые файлы или файлы данных, это также может быть двоичный файл. Для обычных файлов вывод ls -l
будет выглядеть следующим образом:
-rw-rw-r-- 1 username group 74 Nov 27 16:03 mytext.txt
В общем, первое место для обычного файла a -
должно появиться. В таких случаях if [ -f FILE ]
было бы целесообразно.
Нерегулярные файлы - это устройства, каналы, сокеты, tty и т. Д., Все остальное, что подпадает под философию «Все есть файл», как указано в drc. Вы можете пройти Unix_file_types для получения дополнительной информации.
Вы можете проверить вывод ls -l
, например,
crw-rw---- 1 root tty 4, 1 Dec 9 13:41 /dev/tty1
brw-rw---- 1 root disk 1, 11 Dec 9 13:41 /dev/ram11
. Для всех нестандартных файлов следует использовать if [ -a FILE ]