【发布时间】:2019-02-24 09:25:03
【问题描述】:
我想知道给定目录中是否存在文件。
我需要在temporaryPath中找到某些.txt文件,但文件的目录需要适合模式,我需要知道文件是否存在于给定的模式中,因为我认为这是最快的方法找到文件,唯一的“不确定”或“.*”路径在 a/b/c/d/e/ 和 dou/you/1.txt 之间,如果我尝试在 a 下使用 Find::File 正常查找父目录 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
Perl
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/.*/
有什么办法吗?
【问题讨论】:
-
听起来您想查看特定文件是否位于目录树中的某个位置,但不知道它们的确切路径?如果是这样,File::Find 就是你的朋友。
-
@Shawn,我知道目录在哪里,我只想知道它是否可以在路径中间使用 .* 以及为什么我不能在 $dir 中声明我的路径。如果我使用Find::File,它将在父目录的子目录中搜索所有需要的文件,并且这些文件在子目录中具有相同的名称。
-
好的。
-e和其他所有采用文件名的东西都需要文件的相对或绝对路径。没有像 shell 这样的通配符会扩展。 -
@Shawn,如果我想在这个父目录中找到我想要的文件 a/b/c/d/e/ ,所花费的时间是如此之长。例如,我的@files123 = File::Find::Rule->file() ->name( '1.txt' ) ->in( 'a/b/c/d/e/' );并且存在风险,即我获得了我不想要的目录路径。我希望文件必须在这个父文件夹 a/b/c/d/e/ 和这个文件夹中 dou/you/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/z/x/c /dou/you/1.txt ,文件 1.txt 必须在这些完整路径之一中。
-
也许您可以edit 提出您的问题,并包含一组示例目录和文件,并说明您想找到哪些和不想找到哪些。
标签: perl directory file-exists