如何定位文件
概述
应用程序中的某些脚本可能需要在不知道文件位置的情况下访问文件。如果您正在使用bash命令,则可以使用找到
为了找到他们。在syob娱乐下载mfony中,可以轻松地使用sfFinder
类。执行复杂的搜索只是添加新的搜索条件,结果是一个简单的文件路径数组。
的sfFinder
类
的sfFinder
类如果是基于Perl的文件查找器类文件::::规则
模块。它可以找到文件或目录(或两者都可以),并根据一组用户定义的参数对搜索进行筛选规则.基本用法如下:
创建一个
sfFinder
通过调用类方法类型()
.你必须明确你期望的结果是什么文件
,dir
或任何
)美元的仪= sfFinder::类型(“文件”);
添加规则来优化搜索并减少结果的数量
美元的仪=美元的仪->的名字(‘* . php ');
方法启动搜索
在()
方法,将搜索的根目录设置为参数美元的文件=美元的仪->在(“/ home /生产/ myproject的”);
所有这些方法调用都可以链接到一行,这通常更容易阅读:
美元的文件= sfFinder::类型(“文件”)->的名字(‘* . php ')->在(“/ home /生产/ myproject的”);//可以读为//查找'/home/production/myproject'目录下名称与'*.php'匹配的文件
的在()
方法返回一个文件数组,可以轻松地用于文件操作:
foreach(美元的文件作为美元的文件){美元的处理=打开外部文件(美元的文件,“r”);...}
请注意
的sfFinder
类是自动加载的,不需要在脚本中使用。
规则原则
类的方法调用编写了用于细化搜索的规则sfFinder
对象。所有方法都返回当前sfFinder
对象以允许轻松链接。
finder1美元= sfFinder::类型(“文件”)->的名字(‘* . php ');//是sfFinder对象finder2美元= sfFinder::类型(“文件”)->的名字(‘* . php ')->大小(> 10 k的);//也是sfFinder对象美元的文件=finder1美元->在(“/ home /生产/ myproject的”);//是文件路径数组
规则之外的所有规则都可以被多次调用在()
方法。
有些规则是累积的(名称()
例如),而另一些则是破坏性的(比如maxdepth ()
)。对于破坏性规则,只有最近的方法调用才算数:
//它将过滤同时满足这两个条件的文件名美元的仪= sfFinder::类型(“文件”)->的名字(‘* . php ')->的名字(“成功* *’。);//相同美元的仪= sfFinder::类型(“文件”)->的名字(‘* Success.php‘);//这里只考虑最后一次调用美元的仪= sfFinder::类型(“文件”)->maxdepth(5)->maxdepth(3.);//相同美元的仪= sfFinder::类型(“文件”)->maxdepth(3.);
过滤规则
按名称筛选
属性的调用可以过滤文件名的结果名称()
中的模式的方法。一团或正则表达式格式:
美元的仪= sfFinder::类型(“文件”)->的名字(‘* . php ');美元的仪= sfFinder::类型(“文件”)->的名字(“/ *。\。php / ');
方法进行负过滤,甚至可以从结果中排除某些文件名not_name ()
方法:
美元的仪= sfFinder::类型(“文件”)->not_name(的基本*’);美元的仪= sfFinder::类型(“文件”)->的名字(' / ^基地。*美元/ ');
按大小过滤
方法根据文件大小筛选搜索结果尺寸()
方法,该方法需要一个包含比较作为参数的字符串。该方法还可以理解大小:
//只搜索大于10000字节的文件美元的仪= sfFinder::类型(“文件”)->大小(> 10 k的);//只搜索小于1kb的文件美元的仪= sfFinder::类型(“文件”)->大小(“< = 1 ki”);//只搜索123字节大小的文件美元的仪= sfFinder::类型(“文件”)->大小(123);
用于表示大小的符号是二进制前缀由国际单位制定义。
限制搜索深度
方法进行的搜索默认情况下sfFinder
对象是递归的,并扫描所有子目录。属性可以覆盖此默认行为maxdepth ()
方法设置文件树结构中的最大搜索深度:
//在目录和子目录中搜索美元的仪= sfFinder::类型(“文件”);//只在传递给in()方法的目录中搜索,//而不是在任何子目录中美元的仪= sfFinder::类型(“文件”)->maxdepth(1);
方法来指定最小深度mindepth ()
方法。
默认情况下,最小深度为0,最大深度为无穷大(或接近)。
不包括目录
如果你想从搜索中排除目录,你可以使用两种方法:
的
删除()
方法在找到作为参数给出的模式的树结构部分中停止搜索。把它看作是一个禁止去看目录里有什么://忽略'的内容。svn的文件夹美元的仪= sfFinder::类型(“任何”)->修剪(. svn的);
发现者不会深入到任何
. svn
文件夹,但是. svn
文件夹本身仍然是结果的一部分。的
丢弃()
方法从结果中删除与参数匹配的文件或文件夹,但不停止树结构探索。//删除`。svn的文件夹from the result美元的仪= sfFinder::类型(“任何”)->丢弃(. svn的);
这两种方法经常结合使用,当目录而且它的内容需要从搜索中排除:
//删除`。svn的文件夹而且的ir content from the result美元的仪= sfFinder::类型(“任何”)->修剪(. svn的)->丢弃(. svn的);
提示
要排除版本控制程序添加的文件和目录,sfFinder
提供一个快捷方法:ignore_version_control ()
.它将修剪,丢弃和修剪所有文件和目录看起来像. svn
,CVS
,_darcs
,.arch-params
,.monotone
,.bzr
.
搜索起点
的在()
方法用于指定sfFinder
必须查找文件或目录。它可以以文件路径或文件路径数组作为参数:
//在单个位置进行搜索美元的文件=美元的仪->在(“/ home /生产/ myproject的”);//在多个位置搜索美元的文件=美元的仪->在(数组(“/ home /生产/ myproject的”,“/ home /生产/ myotherproject”));
它可以接受绝对路径或相对路径:
//绝对路径美元的文件=美元的仪->在(“/ home /生产/ myproject的”);//相对路径美元的文件=美元的仪->在(“. . /项目/ myproject的”);
返回相对路径
方法返回的路径默认为在()
方法是绝对路径。方法的调用,可以选择就地接收相对路径的数组相对()
方法。在()
:
// paths结果相对于根目录美元的文件=美元的仪->在(“/ home /生产/ myproject的”);//路径结果相对于当前目录,//即当前脚本的目录美元的文件=美元的仪->相对()->在(“/ home /生产/ myproject的”);
本作品采用创作共用署名-非商业性-禁止派生作品3.0未移植许可协议授权。