我需要使用一个shell命令来列出服务器上符合以下目录模式的所有文件:
/home/*/public_html/images/*.php
手动完成这个过程比较耗时,而且我对这些命令一窍不通。
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/
中查找文件。 - The Unknown DevShell脚本:
find /home/*/public_html/images -iname "*php" -exec echo {} \;
你可以更改-exec命令,对返回的文件执行任何所需操作。在这种情况下,我们使用echo命令,但是您也可以轻松执行其他操作。
/home/foo/public_html/images/file.php
,但不匹配 /home/foo/bar/public_html/images/file.php
。有什么办法可以匹配任意深度的目录吗? - The Unknown Dev-path
可以匹配任意深度的目录。(例如,-path "*/images/*"
将匹配任何路径中具有images
目录的文件。) - Marcus让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
从 shell 中。
locate|grep
是搜索缓存目录列表的一种方法。 - mario