ls -l grep'关键字'并将结果导入php var

时间:2014-08-26 14:44:13

标签: php bash

root@ubuntu:/srv/www/web.domain.com/public_html# ls -l | grep 'aria2'
-rw-r--r--   1 nginx nginx      201 Aug 26 14:40 M010102.aria2
-rw-r--r--   1 nginx nginx     1313 Aug 26 14:41 [Heido] Hamasaki.aria2
-rw-r--r--   1 nginx nginx      125 Aug 26 14:41 [Riycou] K-Project [MP4 AAC 720p].aria2

我做了以下

ls -l | grep 'aria2'

我想在PHP上做这件事,我可能会

shell_exec("ls -l | grep 'aria2');

问题是如何将返回结果记录到php数组

M010102.aria2 [Heido] Hamasaki.aria2 [Heido] Hamasaki.aria2

谢谢!

3 个答案:

答案 0 :(得分:4)

根据shell_exec的官方documentation,输出是函数的返回值:

<?php
  $output = shell_exec('ls -lart');
  echo "<pre>$output</pre>";
?>

RichardBernards'comment是正确的。如果您希望将输出作为数组,则可以使用exec($command, &$output)函数。请阅读official documentation以获取更多信息。

答案 1 :(得分:3)

为什么不使用PHP的glob()?它会返回一组文件:

$files = glob('*.aria2');

这大致相当于shell命令ls *.aria2

顺便说一句,作为一般建议,解析ls(例如,通过将其汇总到grepis frowned upon

答案 2 :(得分:0)

您可以使用PHP命令来完成同样的事情:

<?php
$directory = getcwd();
$scanned_directory = array_diff(scandir($directory), array('..', '.'));
$result = preg_grep("/^.*\.aria2$/i",$scanned_directory);
foreach ($result as $value){
        echo $value,'<br>';
}
?>

更多详情:

Checking for file-extensions in PHP with Regular expressions

http://php.net/manual/en/function.preg-grep.php

http://php.net/manual/en/function.scandir.php