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.)
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
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.