ls 差异 - 找到与未找到(没有这样的文件或目录) - 在同一文件上

ls 差异 - 找到与未找到(没有这样的文件或目录) - 在同一文件上

对文件名的一部分进行通配符, ls 表示它存在:

$ ls *rammar*  
London_Grammar_-_Hey_Now_Official_Video-nMEHJPuggHQ.mp4  
London_Grammar_-_Hey_Now_Radio_1_s_Big_Weekend_2014-on1QEcz1sTI.webm  
London_Grammar_-_Interlude_Live_on_KEXP-7eNA90LlxmY.mp4

对文件名的另一部分进行通配符,ls 表示它不存在:

$ ls *7eNA9*
ls: cannot access `*7eNA9*`: No such file or directory

ls 没有别名

返回代码(通过echo $?):

2

男人LS:

Exit status:  
 2      if serious trouble (e.g., cannot access command-line argument).

中央操作系统

7.5.1804

巴什

4.2.46(2)

核心工具

GNU v8.22

答案1

shell 通配符模式将扩展为任何与其匹配的名称,无论该名称是常规文件还是目录的名称。当ls在命令行上给出目录名称时,它将列出其内容。

似乎lsfor报告的一个或多个名称ls *rammar*可能来自名称与该模式匹配的目录。这些文件之一是ls输出中的最后一个文件。

这就是为什么当您尝试第二个命令时,找不到该文件。它在当前目录中不可用。


评论要点总结:

我建议

find . -type f -name '*7eNA90*`

会找到该文件,并且还补充说,在这种情况下引用该*7eNA90*模式很重要,这样 shell 就不会尝试扩展它(它由find)使用。

@iletras 尝试了这个并且它有效,但他也发现它有效没有引号。它可以在没有引号的情况下工作,因为当前目录中没有任何内容与模式匹配,因此 shell 不会展开模式。

然而,养成依赖这种行为的习惯是危险的,因为在一般情况下,人们可能并不总是知道或记住当前目录中可用或将可用的名称。某些 shell 还具有用于将不匹配的模式扩展为空字符串的 shell 选项,nullglob例如bash.如果模式未加引号,则设置此 shell 选项将使命令失败。

简单地引用模式比依赖环境更安全。

相关内容