2015-08-25 2 views
3

У меня есть 999999 файлы в каталоге:запустить команду Linux кот в питона или Баш цикла

member.php\?1 

member.php\?2 

... 

member.php\?99999 

Я хочу, чтобы запустить ниже cat команд в Баш или питона петлю на конкретных файлов. Эта команда должна извлекать имена пользователей из .php-файлов, но не работает из-за большого количества задействованных файлов.

[email protected]: cat member.php\?* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt 

Мое решение (этот способ работает отлично): выполнить над командой кошка, шаг за шагом по каждому файлу следующим образом:

[email protected]:cat member.php\?1* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt 

[email protected]:cat member.php\?2* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt 

... 

[email protected]:cat member.php\?9* | grep -i '<li class="navbit lastnavbit"><span>' | cut -d'>' -f3 | cut -d'<' -f1 >> users.txt 

Я хочу автоматизировать выше решение, запустив его в цикле питона или петля 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 

Что такое хороший способ сделать это?

ответ

1

В вашей команде питона, вы делаете это неправильно, то % 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) 

Кроме того, вы должны перебирать требуемую сумму.

+0

Tnx много дорогой Ананд S Кумар. он работает красиво. –

+0

Рад, что мне было полезно. –

2
#!/bin/bash 
for i in {1...9999999} 
do 
    $i 
done 

Теперь вы просто добавить $ я рядом с командой вы претендуете

'cat member.php\?$i 
+1

Это будет работать для точного числа, но не лучше трубы на выходе или команду ls 'find'? – slezica

0

В Python я бы использовал glob для сканирования каталога, в случае изменения количества файлов.

import glob 
for file in glob.glob('member*'): 
    process(file) 

где процесс - это ваша функция, связанная с файлом, указанным в качестве аргумента.

Также обратите внимание, что если ваш php-файл действительно заполнен HTML, вы можете использовать BeautifulSoup, чтобы выполнить эту работу.

В Баш, я хотел бы использовать 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 
+0

Tnx много дорогой Aif –

Смежные вопросы