如何检查目录中是否存在特定文件名?

如何检查目录中是否存在特定文件名?

/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

相关内容