如果某个文件存在,是否有命令显示消息“是”?如果文件不存在,则无需提供功能。
答案1
使用这个简单的 Bash 单行命令:
if [ -e FILENAME ] ; then echo Yes ; fi
如果存在则检查-e
结果为真FILENAME
,无论它是什么(文件、目录、链接、设备……)。
如果你只想检查常规文件,请-f
使用@Arronical说。
答案2
您可以使用这个简单的脚本:
#!/bin/bash
if [[ -f $1 ]]; then
echo "Yes"
exit 0
else
exit 1
fi
将其另存为file-exists.sh
。然后在终端中输入chmod +x file-exists.sh
。
使用方式如下:用您想要检查的文件./file-exists.sh FILE
替换它,例如:FILE
./file-exists.sh file.txt
如果file.txt
存在,Yes
则会打印到终端,程序将以状态 0(成功)退出。如果文件不存在,则不会打印任何内容,程序将以状态 1(失败)退出。
如果您好奇我为什么包含该exit
命令,请继续阅读...
命令有什么问题exit
?
exit
导致进程正常终止。这基本上意味着:它会停止脚本。它接受一个可选(数字)参数,该参数将是调用它的脚本的退出状态。
此退出状态使您的其他脚本能够使用您的file-exists
脚本,并且是它们了解文件是否存在的方式。
一个简单的例子就是这个脚本(将其保存为file-exists-cli.sh
):
#!/bin/bash
echo "Enter a filename and I will tell you if it exists or not: "
read FILE
# Run `file-exists.sh` but discard any output because we don't need it in this example
./file-exists.sh $FILE &>> /dev/null
# #? is a special variable that holds the exit status of the previous command
if [[ $? == 0 ]]; then
echo "$FILE exists"
else
echo "$FILE does not exist"
fi
按照通常的方式操作chmod +x file-exists-cli.sh
然后运行它:./file-exists-cli.sh
。你会看到类似这样的内容:
文件已存在 (exit 0
):
➜ ~ ./file-exists-cli.sh
Enter a filename and I will tell you if it exists or not:
booleans.py
booleans.py exists
文件不存在 (exit 1
):
➜ ~ ./file-exists-cli.sh
Enter a filename and I will tell you if it exists or not:
asdf
asdf does not exist
答案3
在命令行上的 bash shell 中。
if [[ -f /path/to/file ]]; then echo "Yes"; fi
这使用 bash 条件运算符-f
,并检查文件是否存在且是否为常规文件。如果您想测试任何文件(包括目录和链接),请使用-e
。
答案4
解决此类问题的方法有很多种,这里还有一种方法:使用find
带有标志的命令-exec
。文件路径可以分为两部分,find /etc
一部分设置目录,-name FILENAME
另一部分指定文件名(废话!)。-maxdepth
将继续仅find
使用/etc
目录,不会进入子目录
adminx@L455D:~$ find /etc -maxdepth 1 -name passwd -exec printf "YES\n" \;
YES
adminx@L455D:~$ find /etc -maxdepth 1 -name passwd1 -exec printf "YES\n" \;
adminx@L455D:~$
另一种方法,通过stat
:
adminx@L455D:~$ stat /etc/passwd1 &>/dev/null && echo YES
adminx@L455D:~$ stat /etc/passwd &>/dev/null && echo YES
YES
或者通过python:
>>> import os
>>> if os.stat('/etc/passwd'):
... print 'YES'
...
YES
>>> if os.stat('/etc/passwd1'):
... print 'YES'
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/etc/passwd1'
或者使用简短的命令行替代方案:
python -c "from os.path import exists; print 'Yes' if exists('/etc/fstab') else '' "