lista arquivos em diretórios específicos com mais de 1 dia ou 24 horas

2

Eu estou tentando escrever um simples script de backup em python, onde tento listar os arquivos que estão 24 horas em diretórios específicos que eu escolheria.

Eu li o manual de encontrar e usar

encontre. -mtime 1 > log.dat

para obter a lista de arquivos no log.dat, no entanto, eu também obtenho as informações do caminho nessa lista como tal

./ hpc06MatlabCodes / 2011 / Apr / 3dBoxModel
./hpc06MatlabCodes/2011/Apr/3dBoxModel/vfluidIrca10.dat ./hpc06MatlabCodes/2011/Apr/3dBoxModel/vLRecoveredSystem.mat

existe uma maneira de excluir os diretórios e obter apenas a lista de arquivos. Greetz, Umut

    
por Umut Tabak 07.04.2011 / 17:13

2 respostas

1

Adicione o sinalizador "-type f" para encontrar:

$ find . -type f -a -mtime 1 > log.dat

(o -a é 'e' - é a conjunção padrão, mas eu gostaria de especificá-lo caso o padrão mude em algum momento no futuro.)

    
por 07.04.2011 / 17:18
1

Como você está fazendo isso é python, eu usaria:

def get_old_files(topdir, howold=24*3600):
    import os, time
    now = time.time()
    filelist = []
    def traverse_links(filename):
        if not os.path.islink(filename):
            return filename
        return traverse_links(os.path.normpath(
                    os.path.join(os.path.dirname(filename), os.readlink(filename)))))
    for dirpath, dirnames, filenames in os.walk(topdir):
        for name in [traverse_links(os.path.join(dirpath, f)) for f in filenames]:
            try:
                if os.path.isfile(name) and now - os.path.getmtime(name) > howold:
                    filelist.append(name)
            except OSError:
                pass # ignore bad symlinks
    return filelist

Isso deve fazer o que você deseja, você também pode adicionar um argumento opcional que irá restringir os diretórios. A vantagem de usar essa chamada acima de find é a sobrecarga extra envolvida na geração de um novo processo, em vez de fazer tudo dentro do processo.

    
por 08.04.2011 / 16:43