if
我对 Bash 脚本语句中可以使用的两个标签感到困惑。
一个是-f
,另一个是-a
。
他们的描述如下:
[ -f FILE ] True if FILE exists and is a regular file.
[ -a FILE ] True if FILE exists.
现在,当我在 shell 脚本中使用 if 条件时,我怎么知道应该使用哪个标签。比如我有一个脚本,它使用常规备份tar
并创建一个文件,file-name.tar.gz
那么我怎么知道哪个是常规文件呢?谢谢。
答案1
常规文件都是文本或数据文件,也可以是二进制文件。对于常规文件,输出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 ]
答案2
对于 tar 文件 - 以及基本上您创建的任何其他文件 --f
都是正确的选择。
-a
用于存储诸如设备节点、fifo 等特殊文件,根据 Unix 哲学一切皆文件以文件形式呈现在您的文件系统中。