如何查找 2 或 3 个字符长的隐藏文件名

如何查找 2 或 3 个字符长的隐藏文件名

我想在 Linux 机器上找到一个名称为 2 或 3 个字符长的隐藏文件。

我试过:

ls .?[a-zA-Z][a-zA-Z]
ls .??[a-zA-Z] 

我也尝试过find . -name "???"find . -name "??"但它只显示分别包含 3 个和 2 个字符的文件名。

答案1

隐藏的文件名始终以点开头。两个字符长的隐藏文件名(包括初始点)将与 , 匹配.?,而.??三个字符长的隐藏文件名将匹配。

假设您想要以下名称常规文件,而不是目录和其他文件类型,那么您就可以使用

find . -type f \( -name '.?' -o -name '.??' \)

这将找到当前目录中或当前目录下的常规文件,其名称被隐藏且长度为两个或三个字符。

如果您使用的是bashshell,并且只对当前目录中的名称感兴趣:

shopt -s nullglob
for name in .? .??; do [[ -f $name ]] && printf '%s\n' "$name"; done

这将循环遍历与两种模式之一匹配的所有名称(如果有的话),并打印出与常规文件或常规文件的符号链接相对应的名称。

设置nullglobshell 选项bash可确保模式在不匹配任何名称时被完全删除,而不是保持未展开状态。

通过extglob在 中设置 shell 选项bash,这两个模式.?.??可以组合成.@(?|??)(或者可能是.??(?),但这有点混乱)。

zshshell 中,您可以通过 glob 限定符使模式仅匹配常规文件,因此不需要该循环:

printf '%s\n' .(?|??)(.)

这里,(.)是 globbing 限定符,它将名称匹配限制为仅常规文件。

答案2

findBash CentOS 8 中的GNU版本 4.6.0:

find . -type f -name '.??' -o -name '.???'

这将找到包含两个或三个字符的隐藏文件。

如果您将 算作.字符之一:

find . -type f -name '.?' -o -name '.??'

相关内容