2

Я пытаюсь написать простой скрипт резервного копирования на python, в котором я пытаюсь перечислить файлы, которые старше 24 часов, в определенных каталогах, которые я бы выбрал.

Я прочитал инструкцию найти и использовать

находить . -mtime 1> log.dat

чтобы получить список файлов в log.dat, однако я также получаю информацию о пути в этом списке как таковую

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

Есть ли способ исключить каталоги и получить только список файлов. Привет, Умут

2 ответа2

1

Поскольку вы делаете это Python, я бы использовал:

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

Это должно делать то, что вы хотите, вы также можете добавить необязательный аргумент, который будет сокращать каталоги. Преимущество использования этого по сравнению с вызовом find заключается в дополнительных затратах на порождение нового процесса, а не на выполнение всего этого внутри процесса.

1

Добавьте флаг '-type f', чтобы найти:

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

(-a это 'и' - это соединение по умолчанию, но я хотел бы указать его на случай, если по умолчанию изменится в какой-то момент в будущем.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .