我想将一个可能的扩展列表迭代为两个变量,以找到所有可能的匹配项。
使用bash,这将部分实现如下:
while read ext; do
find $DIR -type f -name "*.$ext.*"
done < extensions.txt
while read ext; do
find $DIR -type f -name "*.*.$ext"
done < extensions.txt
其中extensions.txt
包含:
phar
php
pl
py
cgi
asp
js
html
htm
phtml
txt
gif
但我想要实现的是只将这一列表的扩展合并在一起。例如,我想找到像filename.php.txt
或filename.html.gif
这样的文件,而不仅仅是像filename.random.extension
这样的任何类型,因为这会输出太多文件。
有人能帮忙吗?
到目前为止,我已经按照指示进行了尝试
我在目录/some/www/path/html/
中放置了一个名为filename.php.txt
的文件我运行以下脚本
#!/usr/bin/python
from glob import glob
with open('/root/scan-files/extensions.txt', 'r') as f:
exts = f.readlines()
for file in glob("/some/www/path/html/*.*.*"):
if all(i in exts for i in file.split('.')[1:]):
print(file)
并且没有输出。它应该在该路径中找到filename.php.txt
。
尝试调试:
python -m pdb find-malicious-extensions.py
> /root/scan-files/find-malicious-extensions.py(3)<module>()
-> from glob import glob
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(5)<module>()
-> with open('/root/scan-files/extensions.txt', 'r') as f:
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(6)<module>()
-> exts = f.readlines()
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(8)<module>()
-> for file in glob("/some/www/path/html/*.*.*"):
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(9)<module>()
-> if all(i in exts for i in file.split('.')[1:]):
(Pdb) n
> /root/scan-files/find-malicious-extensions.py(8)<module>()
-> for file in glob("/some/www/path/html/*.*.*"):
(Pdb) n
--Return--
> /root/scan-files/find-malicious-extensions.py(8)<module>()->None
-> for file in glob("/some/www/path/html/*.*.*"):
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb) n
The program finished and will be restarted
你知道哪里出了问题吗?
以下是如何使用glob
模块中的glob
方法:
from glob import glob
with open('extensions.txt', 'r') as f:
exts = f.readlines()
for file in glob("*.*.*"):
if all(i in exts for i in file.split('.')[1:]):
print(file)
分解:
- 从
glob
模块导入glob
方法:
from glob import glob
- 打开
extensions.txt
文件并将所有扩展名存储在列表中:
with open('extensions.txt', 'r') as f:
exts = f.readlines()
- 遍历当前目录中名称中至少有2个点的所有文件:
for file in glob("*.*.*"):
- 将每个文件的名称拆分一个点,并检查除了第一个字符串之外的所有字符串是否都是有效的扩展名。如果是,请打印文件名:
if all(i in exts for i in file.split('.')[1:]):
print(file)