从此处跟进:Perl Imgsize not working in loop? 我有另一个问题 - 当它读取目录中的文件时,我怎么不让perl列出单点和双点条目?
与上面的链接问题一样,我对while循环(while ($file = readdir($dh))
)的输出是这样的:
.
..
file1.jpg
file2.jpg
file3.jpg
file4.jpg
file5.jpg
这会产生问题,因为我在某个地方也有一个计数器,它正在计算我的文件。并且.
和..
不算作文件,因此我的计数器在我的目录中提供的文件数量确实超过实际数量。
我将if($file == "." || $file == ".."){ continue;}
和if ($file ~ /^\./ or $file ~ /^\.\./) {continue;}
及其不同的变体添加到while循环的开头...但由于编译错误,我一直在中止。
我们如何获得单点和双点条目?
答案 0 :(得分:7)
要测试字符串,您必须使用eq
:
if($file eq "." || $file eq ".."){ next;}
或:
next if $file =~ /^\.\.?$/;
答案 1 :(得分:3)
我会建议别的东西 - 不要使用readdir
而是使用glob
。
my @dirlist = glob ( "$dir/*.jpg" );
然后,您将获得与该规范匹配的文件的路径列表。如果您正在执行此操作,此功能特别有用:
foreach my $file ( glob ( "/path/to/file/*.jpg" ) ) {
open ( my $input, '<', $file ) or die $!;
}
在readdir
的情况下,您只会获得文件名,并且必须自己重建路径。
答案 2 :(得分:0)
这可行,并跳过前2。和..
@IBAction func nosOffresTapped(sender: AnyObject) {
let window = UIApplication.sharedApplication().keyWindow
let viewController = window!.rootViewController as! ContainerViewController
let nosOffresViewController: NosOffresViewController = UIStoryboard.nosOffresViewController()!
nosOffresViewController.delegate = viewController
self.delegate?.pushViewControllerInStack!(nosOffresViewController)
self.navigationController?.pushViewController(nosOffresViewController, animated: false)
}
答案 3 :(得分:0)
我已经找到了另一个解决方案,它可以删除子文件夹中的所有文件 - 不是从第一个文件(0)开始,而只是从第三个文件(2)开始:
#!/bin/perl
@AllFiles = ();
opendir(DIRECTORY, "temp");
@AllFiles = readdir(DIRECTORY);
closedir DIRECTORY;
print $#AllFiles-1 ."\n"; #Show 3 for three files, as it shows number of last file: 0=. 1=.. 2=aaa.txt 3=bbb.xml 4=ccc.pdf
$FileNumber = 2; #Starting with file 2, don't need to try deleting current and parent folders
until($FileNumber > $#AllFiles ) {
unlink ("temp/" . $AllFiles[$FileNumber]);
print $FileNumber-1 . ": temp/" . $AllFiles[$FileNumber] . "\n"; #show file numbers as 1=aaa.txt 2=bbb.xml 3=ccc.pdf
$FileNumber += 1;
}
答案 4 :(得分:0)
如果您在列表上下文中获取目录内容,则可以使用grep
过滤掉dotfiles:
opendir (my $dh, $src) || die "Can't opendir $src: $!\n";
my @entries = grep {!/^\./} readdir($dh);
closedir ($dh);