我想知道文件是否存在于给定目录中。
我需要在临时路径中找到某些.txt文件,但是文件目录需要适合该模式,我需要知道文件是否在给定模式中存在,因为我认为这是最快的方法查找文件,如果我尝试使用A下的Find :: File以普通方式查找,则唯一的“不确定”或“。*”路径位于a / b / c / d / e /和dou / you / 1.txt之间父目录a / b / c / d / e /,大约需要10分钟,并且我有可能在数组中存储了不需要的路径,因为子目录中也存在1.txt。
例如想要特定的目录
a/b/c/d/e/f/g/h/dou/you/1.txt
a/b/c/d/e/k/l/m/dou/you/1.txt
a/b/c/d/e/k/l/m/wanna/play/2.txt
a/b/c/d/e/z/x/c/wanna/play/2.txt
a/b/c/d/e/f/g/h/with/me/3.txt
a/b/c/d/e/z/x/c/with/me/3.txt
use strict;
use warnings;
my @temporaryPath = qw(
dou/you/1.txt
wanna/play/2.txt
with/me/3.txt
like/play/4.txt
anything/really/5.txt
);
foreach my $temporaryList ( @temporaryPath ) {
my $dir = "a/b/c/d/e/" . "*" . "/$temporaryList";
if ( -e $dir ) {
print " exist :) $temporaryList\n";
}
else {
print " not exist :( $temporaryList\n";
}
}
我在.*
中使用了$dir
,因为路径全路径之间有很多不同的目录
,例如f/g/h
,k/l/m
或z/x/c
。
结果是这个
not exist :( dou/you/1.txt
not exist :( wanna/play/2.txt
not exist :( with/me/3.txt
not exist :( like/play/4.txt
not exist :( anything/really/5.txt
表示$dir
无法读取a/b/c/d/e/.*/
有什么办法吗?
答案 0 :(得分:2)
var query = new Sql().Select("*").From(TableConstants.Questions.TableName)
.Where(string.Format(" CommunityId in ({0})", string.Join(",", communtiyList.Select(x => x.Id)).Split(',')));
正确地报告说,没有文件的路径为-e
,因为a/b/c/d/e/*/dou/you/1.txt
中没有名为*
的目录。
a/b/c/d/e
测试:
use File::Find::Rule qw( );
my @targets = qw(
dou/you/1.txt
wanna/play/2.txt
with/me/3.txt
like/play/4.txt
anything/really/5.txt
);
my $base_dir_qfn = 'a/b/c/d/e';
my @files = File::Find::Rule->file->in($base_dir_qfn);
my $target_pat = join '|', map quotemeta, @targets;
my $target_re = qr{/(?:$target_pat)\z};
for my $file (@files) {
say $file if $file =~ $target_re;
}
答案 1 :(得分:2)
听起来您需要
File::Globstar
模块。它实现了与外壳 globstar 扩展名等效的功能,该扩展名将允许模式中的两个星号func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
guard range.location == 0 else {
return true
}
let newString = (textView.text as NSString).replacingCharacters(in: range, with: text) as NSString
return newString.rangeOfCharacter(from: CharacterSet.whitespacesAndNewlines).location != 0
}
匹配任何字符串,包括路径分隔符
可能看起来像这样
**