EPS*_*dsf 16 command-line find filenames
我想按文件名的长度查找所有文件。
例如,如果我想查找长度为 1 的文件,例如a.go
, b.go
.
我放:
grep '.\{1\}' file
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我可以使用什么命令按文件名长度查找文件?
小智 14
如果只想查找文件名,可以使用以下命令:
find -exec basename '{}' ';' | egrep '^.{100,}$'
Run Code Online (Sandbox Code Playgroud)
这将运行find
,使用提取basename
文件或目录的名称,然后查找任何至少 100 个字符的文件名或目录名称。如果要查找精确长度的文件名,请使用{100}
代替{100,}
。
如果要查找包含路径的文件名,请执行以下操作:
find | egrep '/[^/]{100,}$'
Run Code Online (Sandbox Code Playgroud)
这将返回文件名,包括您运行 find 命令的位置的相对路径。
grep
查找文件内容中的模式。如果你想查看文件的名称,你可以使用 shell glob(如果你只想考虑当前目录中的文件名):
echo ?.go
Run Code Online (Sandbox Code Playgroud)
(顺便说一下,是 shell 计算 glob,而不是命令echo
。)
如果您想从当前目录开始递归地查找目录,则要使用的工具是find
:
find . -name '?.go'
Run Code Online (Sandbox Code Playgroud)
(请注意,您必须引用该模式,以防止 shell 在find
调用之前将其作为 glob 进行评估。)
首先,grep
搜索文件内容,它不会搜索文件名。为了你想要的find
。它没有设置文件名长度的选项,但您可以解析它的输出以获得您想要的内容。以下是我在包含以下文件的目录中运行的一些示例:
$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ab\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 abc\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 abcd\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dir\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ab\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 abc\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 abcd\n
Run Code Online (Sandbox Code Playgroud)\n\n在此目录中搜索文件将返回:
\n\n$ find . -type f | sort\n./a\n./ab\n./abc\n./abcd\n./dir/a\n./dir/ab\n./dir/abc\n./dir/abcd\n
Run Code Online (Sandbox Code Playgroud)\n\n因此,要查找长度为 X 的文件,我们需要删除路径并仅匹配最后一个之后的字符/
:
$ find . -type f | grep -P \'/.{3}$\'\n
Run Code Online (Sandbox Code Playgroud)\n\n该sed
命令只是删除./
. 该标志激活 Perl 兼容正则表达式,这是 PCRE 所-P
需要的,其含义是“匹配字符串的末尾”。{n}
$
你也可以简单地这样做:
\n\nfind . -type f | grep -P \'/...$\'\n
Run Code Online (Sandbox Code Playgroud)\n\n对于小数字来说这很好,输入 15 个点来匹配长度为 15 的文件名,但效率不高。
\n\n最后,如果您想忽略扩展名并仅匹配文件名,请执行以下操作(如 @slm 建议):
\n\nfind . -type f | grep -P \'/.{1}\\.\'\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,这也会找到类似a.bo.go
. 如果您的文件名可以包含多个.
:
find . -type f | grep -P \'/.{1}\\.[^.]+$\'\n
Run Code Online (Sandbox Code Playgroud)\n\n注意:上面的解决方案假设您有相对健全的文件名,不包含换行符等。在计算长度时,它也会计算而不忽略文件名中的空格,这可能不是您想要的。如果其中任何一个有问题,请告诉我,我将更新我的答案。
\n