Это может быть универсальный вопрос о Linux, но я дам ему попытку здесь.
Мне нужен список недавно измененных файлов очень часто, и в настоящее время для него я передаю по каналу ls
вывод к grep
с параметрическим усилителем на сегодня или определенный час, но я должен измениться grep
параметрический усилитель часто для получения обновленного списка, будучи немного непроизводительным.
Существует ли легкая команда для списка последних измененных файлов на определенном пути?
Найти последние 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
, чтобы получить больше идеи.
Сценарий ниже перечисляет все файлы рекурсивно в каталоге, отредактированном короче назад, чем произвольный момент времени. Кроме того, это отображает отрезок времени начиная с последнего редактирования.
Это может использоваться с командой:
findrecent <directory> <time(in hours)>
как показано ниже:
В этом примере меньше чем 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)))
~/bin
findrecent
в ~/bin
Это настолько просто на самом деле. Получить Новый файл в каталоге смородины:
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
Простой и легкий:)
Чтобы получить последние 5 измененных файлов, выполните приведенную ниже команду в нужном каталоге.
ls -lrt | tail -5