如果特定文件存在则显示任意消息的命令

如果特定文件存在则显示任意消息的命令

如果某个文件存在,是否有命令显示消息“是”?如果文件不存在,则无需提供功能。

答案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

这是 bash 条件的丰富资源。

答案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 '' "

相关内容