2015-03-09 4 views
-2

У меня есть инструкция if из Shell Script и попытка записать это в python .. , но я понятия не имею, как это работает в python.Python Script greping directories

if [[ $(ls -d $DIR1/* | grep test) ]]

выше сценарий оболочки .. и я хочу переписать это на языке Python. , что он делает это выглядит для любых каталогов, которые начинаются со слова «TEST» в dir1 и если есть, то он должен выполнить команду, если ..

как я могу сделать это питон?

Я буду редактировать этот вопрос .. Допустим, мой DIR1 является /tmp/doc и в /doc каталогах, есть test1, test2, get1, get2 ...

Я хочу использовать, если заявление, чтобы проверить, если внутри в /doc директории содержит все каталоги, которые содержат слово "test" (в данном случае test1 и test2)

если да, то я хочу, чтобы переместить что test1 и test2 в другие каталоги.

Спасибо

+0

Вы можете уточнить дальше по команде, если здесь. Это то, что вы хотите сделать внутри сценария python, или вы хотите, чтобы python возвращал что-то для вашего сценария оболочки для работы? – ChrisProsser

+0

Я хочу переписать это в скрипте python. Поэтому я конвертирую скрипт скрипта в скрипт python. что означает, что он должен быть IN Python – Young

+0

Какова ценность '$ DIR'? –

ответ

1

Использование os.listdir в сочетании с os.path.isdir:

path = 'YOUR/FOLDER' 
# get all files in path 
all_files = [os.path.join(path, f) for f in os.listdir(path) if f.startswith("test")] 
# filter to keep only directories 
folders = filter(os.path.isdir, all_files) 

Теперь вы можете использовать тот факт, что пустой список оценивает в False:

if folders: 
    print "has folders!" 
+0

как это получить все «тестовые» каталоги? Я не вижу, как это работает .. например. В моем DIR1 есть test1 test2 get2, и я хочу использовать этот оператор if, чтобы увидеть, есть ли каталоги, которые начинаются с теста, если да, чем вызов, переместите этот тест1 и test2. – Young

+0

@Young добавить 'startswith', чтобы исправить это. –

0

Вы можете использовать os.listdir для получить все содержимое в каталоге, используйте os.path.isdir и d.startswith("test"), чтобы найти каталоги, начинающиеся с "тест"

import os 
path = "/tmp/doc" 

print([d for d in os.listdir(path) 
    if os.path.isdir(os.path.join(d, path)) 
    and d.startswith("test")]) 

Если дело не имеет значения, использовать d.lower().startswith("test")

Для перемещения используйте shutil.move:

import os 
import shutil 

path = "/DIR1/" 
test_dirs = (d for d in os.listdir(path) 
     if os.path.isdir(os.path.join(d,path)) 
     and d.startswith("test")) 

for d in test_dirs: 
    shutil.move(os.path.join(d,path),"your/dest/path") 

Или все это в одном цикле:

for d in os.listdir(path): 
    if os.path.isdir(os.path.join(d,path)) and d.startswith("test"): 
     shutil.move(os.path.join(d, path), "your/dest/path") 

Чтобы найти каталоги, начиная с test, вы можете просто использовать ls -d $DIR1/test*/

0

Это относительно прямой эквивалент вашего скрипта. Обратите внимание, ваш grep не проверить, если каталог действительно начинает с «тестом», только если он находится в любом месте, так что этот код делает то же самое:

import os 
import glob 

DIR1 = 'dir1' 
pattern = os.path.join(DIR1, '*') 
if any(os.path.isdir(f) and 'test' in f for f in glob.glob(pattern)): 
    do whatever