如何删除没有文件扩展名的文件?
我正在使用 Strawberry Perl 5.32.1.1 64 位版本。这是我所拥有的:
unlink glob "$dir/*.*";
Run Code Online (Sandbox Code Playgroud)
我还尝试过以下操作:
my @file_list;
opendir(my $dh, $dir) || die "can't opendir $dir: $!";
while (readdir $dh){
next unless -f;
push @file_list, $_;
}
closedir $dh;
unlink @file_list;
Run Code Online (Sandbox Code Playgroud)
这样做的结果是,所有带扩展名的文件都被删除,
但那些不带扩展名的文件保持未删除状态。
你并没有真正解释问题是什么,所以这只是一个猜测。
您用于readdir()获取要删除的文件列表,然后将该列表传递给unlink(). 这里的问题是,您从中返回的文件名readdir()不包括您最初传递到的目录名readdir()。所以你需要像这样填充你的数组:
push @file_list, "$dir/$_";
Run Code Online (Sandbox Code Playgroud)
在评论中你说:
我正在测试 unlink glob "$dir/ . "; 但没有文件扩展名的文件不会被删除。
好吧,如果您考虑一下,您只是要求带有扩展名的文件。如果您传递给的模式glob()包含*.*,那么它将仅返回与该模式匹配的文件(即带有点和点后更多文本的文件)。
解决方案似乎是简化您传递给的模式,glob()因此它只是*.
unlink glob "$dir/*";
Run Code Online (Sandbox Code Playgroud)
当然,这也会尝试删除目录,因此您可能需要这样:
unlink grep { -f } glob "$dir/*";
Run Code Online (Sandbox Code Playgroud)