Comment puis-je obtenir la liste de tous les fichiers dans le répertoire actuel avec leur date de modification et triés par cette date?
Maintenant, je sais comment y parvenir avec find
, stat
et sort
, mais pour une raison étrange, le stat
n'est pas installé sur la boîte et il est peu probable que je puisse le faire installer.
Une autre option?
PS: gcc
n'est pas installé non plus
find
-printf
action semble cependant être la plus simple.Réponses:
Ma méthode la plus courte utilise zsh:
(ajoutez les
D
qualificatifs glob si vous souhaitez également lister les fichiers cachés ou les fichiers dans des répertoires cachés).Si vous avez GNU find, faites-le imprimer les heures de modification du fichier et triez-les. Je suppose qu'il n'y a pas de nouvelle ligne dans les noms de fichiers.
Si vous avez Perl (encore une fois, en supposant qu'il n'y ait pas de nouvelle ligne dans les noms de fichiers):
Si vous avez Python (encore une fois, en supposant qu'il n'y ait pas de nouvelle ligne dans les noms de fichiers):
Si vous avez un accès SSH à ce serveur, montez le répertoire sur sshfs sur une machine mieux équipée:
Avec seulement les outils POSIX, c'est beaucoup plus compliqué, car il n'y a pas de bon moyen de trouver l'heure de modification d'un fichier. La seule façon standard de récupérer les heures d'un fichier est
ls
et le format de sortie dépend des paramètres régionaux et est difficile à analyser.Si vous pouvez écrire dans les fichiers et que vous ne vous souciez que des fichiers normaux et qu'il n'y a pas de nouvelle ligne dans les noms de fichiers, voici un horrible problème: créez des liens durs vers tous les fichiers dans un seul répertoire et triez-les par heure de modification.
la source
find . -print | xargs -n99999 -s999999 ls -ltr
. Mais cela a le problème que (1)xargs
peut ne pas autoriser-m
plus de 512 ou-s
plus de 5120, et (b) même si vous pouvez contourner cela, il y a toujours une taille maximale imposée par le noyau de la liste d'arguments et de l'environnement combinés. La plupart de vos idées (sauf celles de Perl et Python) ont le même problème, c'est pourquoi j'ai spécifiquement évité de construire de longues lignes de commande.zsh
des globs récursifs dans le cas général.print -rl **/*
la seule limite est la quantité de mémoire libre dont vous disposez), et au-delàzargs
. Votre proposition defind … | xargs … ls
triera correctement sixargs
finit par être invoquéels
une seule fois et ne fonctionnera pas s'il y a des caractères spéciaux dans les noms de fichiers.En supposant GNU
find
:Changer
1n,1
en1nr,1
si vous voulez que les fichiers listés plus récents.Si vous n'avez pas GNU,
find
cela devient plus difficile carls
le format d'horodatage varie énormément (les fichiers récemment modifiés ont un style d'horodatage différent, par exemple).la source
ls --time-style="..."
- je ne sais pas s'il s'agit de ls standard ou GNU, probablement GNU.ls
n'a pas cette option.Sur un Mac, il n'y a pas d'argument -printf à trouver, mais vous pouvez le faire à la place:
find . -print0 | xargs -0 -n 100 stat -f"%m %Sm %N" | sort -n|awk '{$1="";print}'
la source
on peut essayer cela (il faut quand même le construire soi-même) https://github.com/shadkam/recentmost
la source
Ignorer les fichiers cachés - avec un horodatage agréable et rapide
Gère bien les espaces dans les noms de fichiers - pas que vous devez les utiliser!
Plus à
find
gogo peut être trouvé en suivant le lien.la source
En parlant généralement de trouver des fichiers par date (cela ne fonctionnera pas pour l'affiche originale, mais je me suis retrouvé ici, donc j'ai pensé que d'autres pourraient aussi bien). Dans mon cas d'utilisation, je souhaite répertorier les fichiers dans le but de les examiner avant leur suppression.
Avec findutils 4.6.0 j'aime:
La commande ci - dessus trouve des fichiers (
-type f
), dans le répertoire de travail (.
il y a qui ont été modifiés) plus de 270 jours (-mtime +270
également-mtime 0
produira les dernières 24 heures, et-mtime -5
montre les 5 derniers jours). Il les utilise ensuitels
pour les répertorier par date, le plus récent en premier (-exec ls -laFGht --time-style=iso {} \+
)Voici un échantillon de la sortie:
La grande chose à ce sujet est qu'une fois la liste révisée, il est simple de remplacer la partie liste par la
find
commande delete:la source