Как перечислить последние измененные файлы в определенном каталоге рекурсивно

Это может быть универсальный вопрос о Linux, но я дам ему попытку здесь.

Мне нужен список недавно измененных файлов очень часто, и в настоящее время для него я передаю по каналу ls вывод к grep с параметрическим усилителем на сегодня или определенный час, но я должен измениться grep параметрический усилитель часто для получения обновленного списка, будучи немного непроизводительным.

Существует ли легкая команда для списка последних измененных файлов на определенном пути?

4
задан 11 October 2015 в 12:37

4 ответа

Найти последние 5 измененных файлов из определенного справочника рекурсивно, от того директивного пробега:

find . -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
  • %T@ с -printf предикат find получит время модификации, так как эпоха для файлов, %p напечатает имена файлов

  • sort -k1,1nr, полностью изменит численно sort, результат согласно времени эпохи

  • head -5 получит нас последние измененные пять имен файлов

, Если Вы просто захотите искать только в текущем каталоге (не рекурсивно), используйте stat:

stat -c '%Y %n' * | sort -k1,1nr | head -5

Или find:

find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5

Проверка man find и man stat, чтобы получить больше идеи.

9
ответ дан 23 November 2019 в 11:40

Сценарий ниже перечисляет все файлы рекурсивно в каталоге, отредактированном короче назад, чем произвольный момент времени. Кроме того, это отображает отрезок времени начиная с последнего редактирования.

Это может использоваться с командой:

findrecent <directory> <time(in hours)>

как показано ниже:

enter image description here

В этом примере меньше чем 36 часов назад перечислены все файлы на моем Рабочем столе, отредактированном.

Сценарий

#!/usr/bin/env python3
import os
import time
import sys

directory = sys.argv[1]

try:
    t = int(sys.argv[2])
except IndexError:
    t = 1

currtime = time.time(); t = t*3600

def calc_time(minutes):
    # create neatly displayed time
    if minutes < 60:
        return "[edited "+str(minutes)+" minutes ago]"
    else:
        hrs = int(minutes/60); minutes = int(minutes - hrs*60)
        return "[edited "+str(hrs)+" hours and "+str(minutes)+" minutes ago]"

for root, dirs, files in os.walk(directory):
    for file in files:
        file = os.path.join(root, file); ftime = os.path.getctime(file)
        edited = currtime - ftime
        if edited < t:
            print(file, calc_time(int(edited/60)))

Как использовать

  1. Создайте, если это еще не существует, каталог ~/bin
  2. Скопируйте сценарий выше в пустой файл, сохраните его как findrecent в ~/bin
  3. Сделайте исполняемый файл сценария
  4. Выйдите из системы и въезжайте задним ходом, и Вы сделаны

Примечание:

  • если никакое время не дано, сценарий перечисляет все файлы, отредактированные в прошлый час
  • если каталог включает пробелы, используйте кавычки, как в примере
3
ответ дан 23 November 2019 в 11:40

Это настолько просто на самом деле. Получить Новый файл в каталоге смородины:

ls -Art | tail -n 2

Получить Новый файл в другом каталоге, например, в/opt/spark/:

ls /opt/spark/ -Art | tail -n 1

Это - когда я использую его на своем кластере:

aa23916@picard03:/opt/spark/applicationHistory$ ls -Art | tail -n 2
app-20180124162809-0004
app-20180124163207-0005.inprogress

Простой и легкий:)

1
ответ дан 23 November 2019 в 11:40

Чтобы получить последние 5 измененных файлов, выполните приведенную ниже команду в нужном каталоге.

ls -lrt | tail -5
0
ответ дан 16 December 2020 в 12:52

Другие вопросы по тегам:

Похожие вопросы: