【发布时间】:2018-02-13 09:07:12
【问题描述】:
我的要求是检查嵌套目录结构是否有任何二进制文件。
目录结构如下所示:
DIR-A
|
|--DIR-X
| |
| |--DIR-X1
| |--DIR-X2
|
|--DIR-Y
| |
| |--DIR-Y1
| |--DIR-Y2
| |--DIR-Y3
|
|--DIR-Z
| |
| |--DIR-Z1
| |--DIR-Z2
| |--DIR-Z3
在任何时间点,Level-1 或 Level-2 都可以有更多目录,即在 level-1 可以有更多目录,例如 DIR-P, DIR-Q 等,在 level-2 可以有 DIR-X3 or DIR-Y4。
我已经编写了一个示例代码,但是如果找到DIR-X1,它就会退出,理想情况下,如果目录中有二进制文件,它应该退出。
#!/usr/bin/perl
my $someDir = "/path/of/DIR-A";
my @files = ();
my $file;
my $i=0;
opendir(DIR, "$someDir") or die "Cant open $someDir: $!\n";
@files = readdir(DIR);
foreach $file(@files)
{
unless ($file =~ /^[.][.]?\z/)
{
print "$i : $file \n";
$i++;
last;
}
}
if ($i != 0)
{
print "The directory contains files! \n";
exit 1;
}
else
{
print "This DIR-A is Empty! \n";
exit 0;
}
closedir(DIR);
请建议我得到如下预期的解决方案:
read DIR-A
print SUCCESS, if none of the nested directories have a binary file.
print ERROR, if at least one of the nested directories has a binary file.
谢谢!
【问题讨论】:
-
可以澄清一下如何识别“二进制文件” - 是通过扩展名,还是需要进行一些内容检查?
-
@Sobrique:二进制文件可以是 *.h、*.bin 或 *.c 文件。
-
*.h和*.c通常不是“二进制”——它们通常是 ascii 文本预编译。 -
是的,这是真的。为了简单起见,我将其称为“二进制”。但是在实际用例中,嵌套目录可能有 *.x、*.h 或 *.bin 文件。
标签: perl perl-module