按模式过滤文件名
我需要在目录中搜索以特定模式开头的文件,例如“abc”。 我还需要删除结果中以“.xh”结尾的所有文件。 我不知道如何用 Perl 来做这件事。
我有这样的事情:
opendir(MYDIR, $newpath);
my @files = grep(/abc\*.*/,readdir(MYDIR)); # DOES NOT WORK
我还需要从结果中删除所有以“.xh”结尾的文件
谢谢,Bi
I need to search for files in a directory that begin with a particular pattern, say "abc". I also need to eliminate all the files in the result that end with ".xh". I am not sure how to go about doing it in Perl.
I have something like this:
opendir(MYDIR, $newpath);
my @files = grep(/abc\*.*/,readdir(MYDIR)); # DOES NOT WORK
I also need to eliminate all files from result that end with ".xh"
Thanks, Bi
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
尝试
其中 MYDIR 是包含目录路径的字符串。
try
where MYDIR is a string containing the path of your directory.
您将正则表达式模式与全局模式混淆了。
You are confusing a regex pattern with a glob pattern.
kevinadc 和 Sinan Unur 使用但没有提及的一点是,当在列表上下文中调用时,readdir() 会返回目录中所有条目的列表。 然后您可以使用任何列表运算符。 这就是为什么您可以使用:
So:
返回 MYDIR 中所有文件的列表。
并且:
返回由
readdir MYDIR
返回的所有符合条件的元素。The point that kevinadc and Sinan Unur are using but not mentioning is that
readdir()
returns a list of all the entries in the directory when called in list context. You can then use any list operator on that. That's why you can use:So:
returns a list of all the files in MYDIR.
And:
returns all the elements returned by
readdir MYDIR
that match the criteria there.另外,可以通过执行以下操作来访问目录中的所有文件:
或者,您可以使用 perl 模块 File::find。
also, all files in a directory can be accessed by doing:
ALternatively you can use the perl module File::find.
您可以使用
glob
,而不是使用opendir
和过滤readdir
(不要忘记linedir
!) :如果您不关心消除
glob
,去掉map+
分割路径
。Instead of using
opendir
and filteringreaddir
(don't forget toclosedir
!), you could instead useglob
:If you don't care about eliminating the
$newpath
prefixed to the results ofglob
, get rid of themap+
splitpath
.