Laravel如何在指定目录搜索以dm开头或.tmp结尾的文件
Laravel 按文件名规则筛选指定目录文件
你可以通过Laravel Filesystem门面的filter()方法,结合文件名判断逻辑来实现需求,以下是具体实现方式:
基础实现(仅当前目录)
如果只需要筛选指定目录下的直接文件(不包含子目录文件),可以用File::files()配合过滤:
use Illuminate\Support\Facades\File; $targetDir = storage_path("app/public/session"); // 筛选以"dm"开头或".tmp"结尾的文件 $filteredFiles = File::files($targetDir)->filter(function ($file) { $filename = $file->getBasename(); // PHP 8.0+ 可用原生函数判断 return str_starts_with($filename, 'dm') || str_ends_with($filename, '.tmp'); }); // 遍历结果示例 foreach ($filteredFiles as $file) { echo $file->getPathname(); // 输出文件完整路径 }
兼容低版本PHP(<8.0)
如果你的PHP版本低于8.0,无法使用str_starts_with和str_ends_with,可以用substr替代:
$filteredFiles = File::files($targetDir)->filter(function ($file) { $filename = $file->getBasename(); return substr($filename, 0, 2) === 'dm' || substr($filename, -4) === '.tmp'; });
包含子目录的递归筛选
如果需要同时筛选子目录下的符合规则文件,将File::files()替换为File::allFiles()即可:
$filteredFiles = File::allFiles($targetDir)->filter(function ($file) { $filename = $file->getBasename(); return str_starts_with($filename, 'dm') || str_ends_with($filename, '.tmp'); });
内容的提问来源于stack exchange,提问作者Fares Mounir Merzouk
相关产品推荐
相关产品推荐

