List all subdirectories on given level

前端 未结 3 686
野性不改
野性不改 2021-01-07 03:15

I have backup directory structure like this (all directories are not empty):

/home/backups/mysql/
    2012/
        12/
           15/
    2013/
        04/
         


        
相关标签:
3条回答
  • 2021-01-07 03:51
    from glob import iglob
    
    level3 = iglob('/home/backups/mysql/*/*/*')
    

    (This will skip "hidden" directories with names starting with .)

    If there may be non-directories at level 3, skip them using:

    from itertools import ifilter
    import os.path
    
    l3_dirs = ifilter(os.path.isdir, level3)
    

    In Python 3, use filter instead of ifilter.

    0 讨论(0)
  • 2021-01-07 03:54

    You can use glob to search down a directory tree, like this:

    import os, glob
    def get_all_backup_paths(dir, level):
       pattern = dir + level * '/*'
       return [d for d in glob.glob(pattern) if os.path.isdir(d)]
    

    I included a check for directories as well, in case there might be files mixed in with the directories.

    0 讨论(0)
  • 2021-01-07 04:01

    import functools, os

    def deepdirs(directory, depth = 0):
        if depth == 0:
            return list(filter(os.path.isdir, [os.path.join(directory, d) for d in os.listdir(directory)]))
        else:
            return functools.reduce(list.__add__, [deepdirs(d) for d in deepdirs(directory, depth-1)], [])
    
    0 讨论(0)
提交回复
热议问题