finder

? Finder: find files and directories with an intuitive API.

Github星跟蹤圖

Nette Finder: Files Searching

Downloads this Month
Build Status
Coverage Status
Latest Stable Version
License

Introduction

Nette Finder makes browsing the directory structure really easy.

Documentation can be found on the website.

If you like Nette, please make a donation now. Thank you!

Installation

The recommended way to install is via Composer:

composer require nette/finder

It requires PHP version 7.1 and supports PHP up to 7.4.

Usage

How to find all *.txt files in $dir directory without recursing subdirectories?

foreach (Finder::findFiles('*.txt')->in($dir) as $key => $file) {
	echo $key; // $key is a string containing absolute filename with path
	echo $file; // $file is an instance of SplFileInfo
}

As a result, the finder returns instances of SplFileInfo.

If the directory does not exist, an UnexpectedValueException is thrown.

And what about searching for *.txt files in $dir including subdirectories? Instead of in(), use from():

foreach (Finder::findFiles('*.txt')->from($dir) as $file) {
	echo $file;
}

Search by more masks, even inside more directories within one iteration:

foreach (Finder::findFiles('*.txt', '*.php')
	->in($dir1, $dir2) as $file) {
	...
}

Parameters can also be arrays:

foreach (Finder::findFiles($masks)->in($dirs) as $file) {
	...
}

Searching for *.txt files containing a number in the name:

foreach (Finder::findFiles('*[0-9]*.txt')->from($dir) as $file) {
	...
}

Searching for *.txt files, except those containing 'X' in the name:

foreach (Finder::findFiles('*.txt')
	->exclude('*X*')->from($dir) as $file) {
	...
}

exclude() is specified just after findFiles(), thus it applies to filename.

Directories to omit can be specified using the exclude after from clause:

foreach (Finder::findFiles('*.php')
	->from($dir)->exclude('temp', '.git') as $file) {
	...
}

Here exclude() is after from(), thus it applies to the directory name.

And now something a bit more complicated: searching for *.txt files located in subdirectories starting with 'te', but not 'temp':

foreach (Finder::findFiles('te*/*.txt')
	->exclude('temp*/*')->from($dir) as $file) {
	...
}

Depth of search can be limited using the limitDepth() method.

Searching for directories

In addition to files, it is possible to search for directories using Finder::findDirectories('subdir*'), or to search for files and directories: Finder::find('file.txt').

Filtering

You can also filter results. For example by size. This way we will traverse the files of size between 100B and 200B:

foreach (Finder::findFiles('*.php')->size('>=', 100)->size('<=', 200)
	->from($dir) as $file) {
	...
}

Or files changed in the last two weeks:

foreach (Finder::findFiles('*.php')->date('>', '- 2 weeks')
	->from($dir) as $file) {
	...
}

Here we traverse PHP files with number of lines greater than 1000. As a filter we use a custom callback:

$finder = Finder::findFiles('*.php')->filter(function($file) {
	return count(file($file->getPathname())) > 1000;
})->from($dir);

Finder, find images larger than 50px × 50px:

foreach (Finder::findFiles('*')
	->dimensions('>50', '>50')->from($dir) as $file) {
	...
}

Connection to Amazon S3

It's possible to use custom streams, for example Zend_Service_Amazon_S3:

$s3 = new Zend_Service_Amazon_S3($key, $secret);
$s3->registerStreamWrapper('s3');

foreach (Finder::findFiles('photos*')
	->size('<=', 1e6)->in('s3://bucket-name') as $file) {
	echo $file;
}

Handy, right? You will certainly find a use for Finder in your applications.

主要指標

概覽
名稱與所有者nette/finder
主編程語言
編程語言PHP (語言數: 0)
平台
許可證Other
所有者活动
創建於2014-03-20 13:19:01
推送於2022-12-14 17:06:18
最后一次提交2022-01-06 04:34:12
發布數16
最新版本名稱v3.0.0 (發布於 2022-12-14 18:06:10)
第一版名稱v2.2.0 (發布於 2014-06-24 13:23:06)
用户参与
星數0.9k
關注者數34
派生數21
提交數161
已啟用問題?
問題數8
打開的問題數1
拉請求數6
打開的拉請求數1
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?