Python脚本greping目录

时间:2015-03-09 14:54:08

标签: python linux bash shell unix

我有一个来自Shell Script的if语句,并尝试将其写入python中。 但是我不知道它在python中是如何工作的。

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

上面是shell脚本..我想用python语言重写它。 它的作用是查找任何以“TEST”开头的目录 在DIR1中,如果有,它应该在if ..

中执行命令

我该怎么做这个python?

我会编辑问题.. 假设我的DIR1/tmp/doc,在/doc目录中,有test1,test2,get1,get2 ......

我想使用if语句检查/doc目录内是否包含任何包含单词"test"的目录(在本例中为test1test2)< / p>

如果是,我想将test1test2移动到其他目录。

谢谢

3 个答案:

答案 0 :(得分:1)

os.listdiros.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!"

答案 1 :(得分:0)

您可以使用os.listdir获取目录中的所有内容,使用os.path.isdird.startswith("test")查找以&#34开头的目录; test&#34;

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开头的dirs,您只需使用ls -d $DIR1/test*/

即可

答案 2 :(得分:0)

这是您脚本的一个相对直接的等价物。请注意,您的grep不会检查实际目录是否以“test”启动,只要在任何地方找到它,所以此代码也是如此:

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