【发布时间】:2011-06-02 15:29:03
【问题描述】:
使用 shell 命令,我需要以以下目录模式列出服务器上的所有文件:
/home/*/public_html/images/*.php
手动执行此操作需要花费很长时间。当涉及到这些命令时,我真的不知道。
【问题讨论】:
-
是的。这是正确的语法。它不工作吗?或者你想让它更快?如果是这样,则不可能进行固有的优化。只是替代方案和解决方法。
locate|grep用于搜索缓存目录列表。
使用 shell 命令,我需要以以下目录模式列出服务器上的所有文件:
/home/*/public_html/images/*.php
手动执行此操作需要花费很长时间。当涉及到这些命令时,我真的不知道。
【问题讨论】:
locate|grep 用于搜索缓存目录列表。
find /path/to/directory/. -path "*/match/this/path/*" -type f -name "*.php"
【讨论】:
/path/to/directory/foo/match/this/path 和/path/to/directory/foo/bar/match/this/path/baz/ 中查找文件
Shell 脚本:
find /home/*/public_html/images -iname "*php" -exec echo {} \;
然后您可以更改 -exec 命令以对返回的文件执行任何您想要的操作。在这种情况下,我们会回应它们,但您也可以轻松地执行其他操作。
【讨论】:
/home/foo/public_html/images/file.php,但不匹配/home/foo/bar/public_html/images/file.php。有什么方法可以匹配任何深度的目录?
-path 匹配任何深度的目录。 (例如,-path "*/images/*" would match any files in any path that has an images` 目录。)
让 bash 为您展开文件并使用 ls 列出它们:
ls /home/*/public_html/images/*.php
示例输出:
/home/grant/public_html/images/bar.php
/home/grant/public_html/images/foo.php
/home/marcog/public_html/images/helloworld.php
【讨论】:
使用 PHP glob 函数
glob('/home/*/public_html/images/*.php')
它将返回一个匹配路径字符串的数组。您也可以只使用:
ls /home/*/public_html/images/*.php
或:
for i in /tmp/*/public_html/images/*.php;
do
some_command "$i"
done
从外壳。
【讨论】: