/opt/backup/
我有一个包含很多文件的路径。例子:
100051
100052
100053
etc.
我想知道100051 100052 100053
文件是否存在/opt/backup/
?
答案1
您可以在要检查的文件名上运行 ls,例如:
$ ls -ld /opt/backup/10005{1,2,3}
ls: cannot access '/opt/backup/100052': No such file or directory
ls: cannot access '/opt/backup/100053': No such file or directory
-rw-r--r-- 1 root root 0 Jul 4 09:25 /opt/backup/100051
在此示例中,您可以看到/opt/backup/100051
存在,而 和/opt/backup/100052
不/opt/backup/100053
存在。
-l
是可选的,但我认为它有更有用的输出-d
是为了防止目录内容的输出
如果您想从脚本进行检查,请使用-f
:
for f in /opt/backup/10005{1,2,3}; do
if [ -f "$f" ]; then
echo "Exists: $f"
else
echo "Not Exists: $f"
fi
done
输出:
Exists: /opt/backup/100051
Not Exists: /opt/backup/100052
Not Exists: /opt/backup/100053
答案2
当它只是一个一次性的事情我发现我真的不想想太多制表符补全快速检查特定文件或目录的确切名称或是否存在(无论如何,在大多数 shell 中)。我通常从以下ls
内容开始cat
:
ls /opt/backup/10003[TAB]
...[TAB]
只需按 Tab 键即可。如果只有一种可能的补全,则将填写匹配的文件名。如果存在多种可能性,则将返回它们的列表。有些 shell 需要按多次键[TAB]
才能返回候选列表。
100030 100031 100032 100033
当然,shell 可能默认(或根本)不允许制表符完成。根据我的经验,这种情况非常罕见。我想到了旧版本 Solaris 的特定安装。
另一方面,如果您需要一次又一次检查相同的文件,这里的其他答案会更好。用例确实没有指定。
答案3
这是一个典型的用法寻找命令:
find /opt/backup -type f -name "100051" -o -name "100052" -o -name "100053"
-f型仅对文件进行过滤
-o参数意味着 OR
-姓名允许您指定名称模板
- maxdepth
您还可以使用或定义要搜索的级别数-mindepth
如果找到文件,输出将是:
/opt/backup/100051
/opt/backup/100052
/opt/backup/100053