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]有两个关键错误:
- 没有指定目标目录
datafiles,命令里的.是当前目录,不是你要找的datafiles; - 通配符写法完全不符合需求——
[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
相关产品推荐
相关产品推荐

