You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UNIX技术问题:显示.dot文件及ls -lL命令目录未找到报错排查

让我逐个帮你解决这两个UNIX命令相关的问题:

问题1:如何显示以点开头且后面跟有其他字符的文件?

默认情况下,ls命令不会显示以.开头的隐藏文件(dot文件),而且直接用ls -a会把当前目录.和上级目录..也列出来,这显然不是你要的。这里有几种实用的方法:

  • 用ls结合精准通配符
    直接用通配符.?*匹配所有以.开头、后面至少有一个字符的文件/目录,再加上-d参数避免展开目录内容:

    ls -ld .?*
    

    这个命令会列出所有真正的dot文件/目录,自动排除.和..。

  • 启用bash的dotglob选项
    如果你用的是bash,可以临时开启dotglob选项,让通配符*也匹配隐藏文件,再用扩展通配符排除.和..:

    shopt -s dotglob
    ls -l !(.|..)
    shopt -u dotglob  # 用完记得关闭选项,恢复默认行为
    
  • 用find命令更灵活筛选
    如果你需要更精准的控制(比如只找文件不找目录),find是更好的选择:

    find . -maxdepth 1 -type f -name ".*" ! -name "."
    

    -maxdepth 1限制只在当前目录查找,-type f指定只找普通文件,! -name "."排除当前目录本身。

问题2:解决「目录未找到」错误并正确列出目标文件

你的命令ls -lL . [fu]有两个关键错误:

  1. 没有指定目标目录datafiles,命令里的.是当前目录,不是你要找的datafiles;
  2. 通配符写法完全不符合需求——[fu]只会匹配名为f或u的文件/目录,根本没法筛选“含.且.后有f/u”的文件。

正确的命令应该这样写(假设datafiles在当前目录下):

ls -lL datafiles/*.*[fu]*

拆解一下这个通配符的逻辑:

  • datafiles/:明确指定要查找的目标目录,避免在当前目录误找;
  • *:匹配文件名中.之前的任意字符;
  • .*:匹配文件名中的.以及后面的任意字符;
  • [fu]:匹配f或u字符;
  • *:匹配f/u之后的任意字符(如果有的话)。

如果你的shell支持扩展通配符(bash中先开启extglob),也可以用更清晰的写法:

shopt -s extglob
ls -lL datafiles/*.*@(f|u)*
shopt -u extglob

这里@(f|u)和[fu]效果一致,都是匹配f或u字符。

另外你用的ls -lL里的-L参数是对的,它会跟随符号链接,显示链接指向的文件的详细信息。

内容的提问来源于stack exchange,提问作者user8974164

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:24:29