为特定子目录中的所有 .php 文件抓取 Unix
Crawling Unix for All .php Files in Specific Subdirectories
我正在尝试获取遵循这些模式的 unix 服务器上任何子目录中的所有 php 文件:
./*/www/p3/
./*/www/P3/
./*/www/p3[some letters after a variation on p3 and P3]/
.php 文件也可能位于这些文件的其他子目录中。
我尝试了两种不同的方法:
fls = glob.glob('./*/www/[a-z][3]/*')
fls.extend(glob.glob('./*/www/[a-z][3]/*/*'))
fls.extend(glob.glob('./*/www/[a-z][3]/*/*/*'))
这也恰好包含另一个我不想要的目录
("./*/www/h3" 每个子目录都有)
我也试过这个:
import os
import fnmatch
matches = []
for root, dirnames, filenames in os.walk('./'):
for filename in fnmatch.filter(filenames, '*.php'):
matches.append(os.path.join(root, filename))
其中 returns 个子目录中的所有文件是 php 个文件。
这两种方法都是好的开始吗?我应该尝试另一种匹配文件名的方法吗?
正如我所说,您可以使用 glob.glob
为 os.walk
选择顶级目录
for top in glob.glob('./*/www/[pP]3*'):
for root, dirnames, filenames in os.walk(top):
for filename in fnmatch.filter(filenames, '*.php'):
matches.append(os.path.join(root, filename))
或者您可以使用 fnmatch
来确保您找到的 php 文件位于所需位置:
for root, dirnames, filenames in os.walk('./'):
if not fnmatch.fnmatch(root, './*/www/[pP]3*'):
continue
for filename in fnmatch.filter(filenames, '*.php'):
matches.append(os.path.join(root, filename))
第一种方法比第二种方法需要更少的文件系统操作。
我正在尝试获取遵循这些模式的 unix 服务器上任何子目录中的所有 php 文件:
./*/www/p3/
./*/www/P3/
./*/www/p3[some letters after a variation on p3 and P3]/
.php 文件也可能位于这些文件的其他子目录中。
我尝试了两种不同的方法:
fls = glob.glob('./*/www/[a-z][3]/*')
fls.extend(glob.glob('./*/www/[a-z][3]/*/*'))
fls.extend(glob.glob('./*/www/[a-z][3]/*/*/*'))
这也恰好包含另一个我不想要的目录 ("./*/www/h3" 每个子目录都有)
我也试过这个:
import os
import fnmatch
matches = []
for root, dirnames, filenames in os.walk('./'):
for filename in fnmatch.filter(filenames, '*.php'):
matches.append(os.path.join(root, filename))
其中 returns 个子目录中的所有文件是 php 个文件。
这两种方法都是好的开始吗?我应该尝试另一种匹配文件名的方法吗?
正如我所说,您可以使用 glob.glob
为 os.walk
for top in glob.glob('./*/www/[pP]3*'):
for root, dirnames, filenames in os.walk(top):
for filename in fnmatch.filter(filenames, '*.php'):
matches.append(os.path.join(root, filename))
或者您可以使用 fnmatch
来确保您找到的 php 文件位于所需位置:
for root, dirnames, filenames in os.walk('./'):
if not fnmatch.fnmatch(root, './*/www/[pP]3*'):
continue
for filename in fnmatch.filter(filenames, '*.php'):
matches.append(os.path.join(root, filename))
第一种方法比第二种方法需要更少的文件系统操作。