我在目录中有999,999个文件:
member.php\?1
member.php\?2
...
member.php\?99999
我想在特定文件的bash或python循环中运行以下cat
命令。此命令应该从.php文件中提取用户名,但由于涉及大量文件而无法工作。
root@alimp5: cat member.php\?* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt
我的解决方案(这种方式可以正常工作):在每个文件上逐步执行cat命令,如下所示:
root@alimp5:cat member.php\?1* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt
root@alimp5:cat member.php\?2* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt
...
root@alimp5:cat member.php\?9* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt
我希望通过在python循环或bash循环中运行它来自动执行上述解决方案。
例如(没有工作):
import os, sys
for count in range(1,10):
os.system('''cat member.php\?%d* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt''') %count
这样做的好方法是什么?
答案 0 :(得分:2)
#!/bin/bash
for i in {1...9999999}
do
$i
done
现在你只需在你假装的命令旁边添加$ i
'cat member.php\?$i
答案 1 :(得分:1)
在你的python命令中,你做错了,% count
应该在os.system()
调用中。示例 -
os.system('''cat member.php\?%d* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt''' % count)
此外,你应该迭代到你想要的数量。
答案 2 :(得分:0)
在Python中,我会使用glob
来扫描目录,以防文件数量发生变化。
import glob
for file in glob.glob('member*'):
process(file)
其中process是处理作为参数给出的文件的函数。
另外,请注意,如果您的php文件实际上是用HTML填充的,则可以使用BeautifulSoup来完成工作。
在bash中,我会使用find
:
find . -name member\*; -exec sh -c "grep -i '<li class=\"navbit lastnavbit\"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt"
或只是
for file in member*; do
grep -i '<li class=\"navbit lastnavbit\"><span>' ${file} | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt
done