我的解决方案建议的背景是一个朋友的故事,他在第一份工作的第二周就抹去了一半的构建服务器清理工作。因此,基本任务是确定文件是否存在,如果存在,让我们将其删除。但是这条河上有一些险恶的急流:
请考虑以下情形:
我们有要删除的文件:filesexists.json
该文件名存储在变量中
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
我们也有一个路径变量来使事情变得真正灵活
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
因此,让我们看看-e
它是否应该执行该操作。文件是否存在?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
是的 魔法。
但是,如果意外将文件变量赋值为nuffin,会发生什么情况?
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
什么?它应该返回一个错误...这是故事的开始,整个文件夹是被意外删除的
另一种选择是专门测试我们理解为“文件”的东西
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
所以该文件存在...
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
所以这不是文件,也许我们不想删除整个目录
man test
有以下说法:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)