有很多方法来检查文件使用如果比很多人意识到的命令。尽管这些信息包含在bash手册,手册页数千行,你很容易发现自己分页下来达到100倍。
这篇文章提供了每个选项的信息和示例的一些最有用的。
检查一个文件是否存在
其中最常用的测试检查文件如果(- f文件名)。这个测试将导致真正的如果文件存在并且是一个常规文件未一个目录或一个符号链接。您可以使用:
如果[- f myfile美元。txt);然后> myfile回响。存在三种> else > touch myfile.txt > fi myfile.txt exists
上面的命令将创建文件使用触摸如果它不存在。下面的命令只会告诉你如果文件是或不是一个常规文件:
如果美元[- f /home/shs];然后>回声文件存在>其他>与文件不是一个常规文件> fi文件不是一个常规文件
如果你想知道一个文件是否存在,不管什么样的文件,您可以使用——一个或者是- e测试。
如果美元(- e符号链接);然后>回声文件存在>其他> > fi回声没有这样的文件
文件是否存在
检查文件是一个目录
使用- d会告诉你,如果一个文件是一个目录。
如果美元[- d /home/shs];然后>回声目录>其他>呼应不是一个目录> fi目录
如果测试换向的影响
你可以逆转的影响如果测试前的测试!(不)的迹象。为了测试一个文件内容,你可以使用这样的命令:
如果美元[s emptyfile];然后>呼应其他内容> >空> fi回响
改变上面的命令来测试是否文件是空的,这样做:
如果[美元!- s emptyfile];然后>回声空>其他> > fi回波有内容
这个的- s“一些内容”!- s“没有内容”。
的!可以使用的吗如果测试。下面是一些例子:
如果[!- d文件]< -文件不是目录如果[!文件- e)如果(< -文件不存在!- r文件]< -文件是不可读的
检查文件权限
其他特别有用的测试可以告诉你如果你能读取文件,写入一个文件或执行一个文件。
如果美元(- r ~ / bin /循环);然后>回波可读> fi可读性
如果美元(- w ~ / bin /循环);然后>回波可写> fi可写的
如果美元(- x ~ / bin /循环);然后>回波可执行可执行>
注意,这些只测试检查你的访问权限,而不是别人的,上面的文件测试都是在用户的主目录中的bin目录(~ / bin)。
您还可以检查一个文件是否一个字符特殊文件,如果已经设置了它的SGID(设置组ID)位,如果已经设置了它的SUID(设置用户ID)位。修改文件权限命令设置在第二和第三位被测试的例子。
如果美元[- c /dev/tty11];然后>回声字符特殊文件> fi字符特殊文件
chmod yn 7755美元如果(g yn);然后>回声SGID > fi SGID集合
如果美元(- u yn);然后>回声SUID > fi SUID集合
检查最近修改的文件
的- n检查是否一个文件的内容被修改自最后一次阅读。的回声下面的命令添加一行,所以第二个测试结果是截然相反的。
如果美元(- n测试文件);然后>回声文件已经修改>其他>与文件没有修改文件没有修改>
$ echo " - - - " > >测试文件$ $如果(- n测试文件);然后>回声文件已经修改>其他>与文件没有修改> fi文件已被修改
比较文件的年龄
您可以使用如果测试来确定一个文件已经更改最近比另一个。的- nt测试的意思是“新”。
- nt $如果[file1 file2);然后>回声file1更新>其他>回声file2更新> fi file2更新
使用不(以上)的地方- nt有相反的效果。
所有如果命令检查文件的状态
这里是一个列表的所有如果测试,检查文件的状态。记住,任何可以被逆转!符号(例如,如果[!file1 ot file2)。
- 如果(——文件)如果文件存在
- 如果(- b文件)如果文件存在,是一个块特殊文件
- 如果(- c文件)如果文件存在,是一个字符特殊文件
- 如果(- d文件)如果文件存在并且是一个目录
- 如果(- e文件)如果文件存在
- 如果(- f文件)如果文件存在,是一个常规文件
- 如果(g文件)——如果已经设置了文件存在及其SGID位
- 如果(- h文件)——如果文件存在,是一个符号链接
- 如果(- k文件)——如果文件存在及其粘贴位设置
- 如果(- p文件)——如果文件存在,是一个命名管道(FIFO)
- 如果(- r文件)——如果文件存在并且是可读的
- 如果(- s文件)——如果文件存在,大小大于零
- 如果(- t FD)——如果文件描述符FD,指一个终端开放
- 如果(- u文件)——如果文件存在及其SUID(设置用户ID)设置
- 如果(- w文件)——如果文件存在并且是可写的
- 如果(- x文件)-如果文件存在并且是可执行的
- 如果(- o文件)如果文件存在,属于有效的用户ID
- 如果(g文件)如果文件存在,属于有效的组ID
- 如果(- l文件)——如果文件存在,是一个符号链接
- 如果(- n文件)如果文件存在,读取以来被修改的时间
- 如果(- s文件)——真正的如果文件存在并且是一个套接字
- 如果(FILE1 - nt FILE2)——真正的如果最近改变了FILE1 FILE2或者FILE1 FILE2并不存在
- 如果(FILE1 ot FILE2)——如果FILE1 FILE2或者以上FILE2和FILE1并不存在
- 如果(FILE1 ef FILE2)——如果FILE1 FILE2指同样的设备和inode号
< !
| 如果测试 | 结果 |
| (——文件) | 如果文件存在 |
| (- b文件) | 如果文件存在,是块特殊文件 |
| (- c文件) | 如果文件存在,是一个字符特殊文件 |
| (- d文件) | 如果文件存在,是一个目录 |
| (文件- e) | 如果文件存在 |
| (- f文件) | 如果文件存在,一个常规文件 |
| (g文件) | 如果已经设置了文件存在及其SGID位 |
| (- h文件) | 如果文件存在,是一个符号链接 |
| (- k文件) | 如果文件存在及其粘贴位设置 |
| (- p文件) | 如果文件存在,是一个命名管道(FIFO) |
| (- r文件) | 如果文件存在并且是可读的 |
| (- s文件) | 如果文件存在,大小大于零 |
| (- t FD) | 如果文件描述符FD,指一个终端开放 |
| (- u文件) | 如果文件存在及其SUID(设置用户ID)设置 |
| (文件- w) | 如果文件存在并且是可写的 |
| (- x文件) | 如果文件存在,是可执行的 |
| (- o文件) | 如果文件存在,属于有效的用户ID |
| (g文件) | 如果文件存在,属于有效的组ID |
| (- l文件) | 如果文件存在,是一个符号链接 |
| (- n文件) | 如果文件存在,并已经修改自去年阅读 |
| (- s文件) | 如果文件存在,一个套接字 |
| (FILE1 - nt FILE2) | 真的如果最近改变了FILE1 FILE2或者FILE1 FILE2并不存在 |
| (FILE1 ot FILE2) | 真的如果FILE1 FILE2以上或如果FILE2和FILE1并不存在 |
| (FILE1 ef FILE2) | 真的如果FILE1 FILE2引用相同设备和inode号 |
- - - - - - >
总结
有很多方法来检查和验证文件在命令行或脚本。这些选项可以帮助确保脚本检查文件在使用它们之前或避免覆盖他们是否已经存在。这些测试通常扮演着重要的角色在使用脚本自动化你的工作。