C’est peut-être une question générique de Linux mais je vais essayer ici.
J'ai besoin d'une liste de fichiers récemment modifiés très souvent et actuellement pour cela je piping ls
output to grep
avec le param aujourd'hui ou à une certaine heure, mais je dois changer fréquemment le grep
param pour obtenir une liste mise à jour, ce qui est un peu peu productif .
Existe-t-il une commande facile pour répertorier les derniers fichiers modifiés sur un certain chemin?
Pour rechercher récursivement les 5 derniers fichiers modifiés dans un certain répertoire, exécutez:
find . -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
%T@
avec -printf
prédicat de find
obtiendra l'heure de modification depuis Epoch pour les fichiers, %p
affichera les noms de fichiers
sort -k1,1nr
inversera numériquement sort
le résultat en fonction de l'époque
head -5
nous obtiendra les cinq derniers noms de fichiers modifiés
Si vous souhaitez uniquement effectuer une recherche dans le répertoire en cours (pas de manière récursive), utilisez stat
:
stat -c '%Y %n' * | sort -k1,1nr | head -5
Ou find
:
find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
Vérifiez man find
et man stat
pour avoir une idée plus précise.
Le script ci-dessous répertorie tous les fichiers récursivement dans un répertoire, édité il y a moins d'un mois. En outre, il affiche la période écoulée depuis la dernière modification.
Il peut être utilisé avec la commande:
findrecent <directory> <time(in hours)>
comme indiqué ci-dessous:
Dans cet exemple, tous les fichiers de mon bureau modifiés depuis moins de 36 heures sont répertoriés.
#!/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
in ~/bin
C'est si simple en fait. Pour obtenir le fichier le plus récent dans le répertoire actuel:
ls -Art | tail -n 2
Pour obtenir le fichier le plus récent dans un autre répertoire, par exemple dans/opt/spark /:
ls /opt/spark/ -Art | tail -n 1
C'est à ce moment que je l'utilise sur mon cluster:
aa23916@picard03:/opt/spark/applicationHistory$ ls -Art | tail -n 2
app-20180124162809-0004
app-20180124163207-0005.inprogress
Simple et facile : )