Je veux lister tous les fichiers (triés par date) qui sont plus récents que l' horodatage au format 20130207003851
dans le répertoire / tmp uniquement. Les sous-répertoires peuvent être omis.
Utilisation de SUSE Linux Enterprise Server 11.
Le format de sortie doit être
S0002948.LOG Feb 7 03:28
S0002935.LOG Feb 7 05:58
S0002952.LOG Feb 7 09:58
S0002940.LOG Feb 7 11:58
find / tmp -newermt "7 feb 2013" -ls liste les fichiers que je veux mais
- comment utiliser l'horodatage au format 20130207003851
- comment trier la sortie?
- comment afficher uniquement le nom et la date du fichier. Nom du fichier d'abord et ensuite la date?
ps je ne veux pas utiliser le toucher pour créer un fichier de référence pour trouver
pss
find -newermt "20130207003851" -ls
find: I cannot figure out how to interpret `20130207003851' as a date or time
shell-script
find
ls
timestamps
Radek
la source
la source
2013007000385
censé représenter? Je suppose que 2013 est l'année, mais comment allez-vous du007000385
7 février?20130207003851
. Je ne l'ai pas copié correctement ou ... désolé pour ça.Réponses:
find
prend en charge de nombreux formats de saisie de date . Le format le plus simple à obtenir est AAAAMMJJ HH: MM: SS. Vous avez déjà les chiffres dans le bon ordre, tout ce que vous avez à faire est d'extraire le premier groupe (${timestamp%??????}
: prendre tous sauf les 6 derniers caractères;:${timestamp#????????}
prendre tous sauf les 8 premiers caractères), et continuer, en ajoutant la ponctuation puis le groupe suivant au fur et à mesure.En bash (et ksh et zsh), mais pas dans ash, vous pouvez utiliser la
${STRING_VARIABLE:OFFSET:LENGTH}
construction plus lisible .Pour trier les fichiers par date, imprimez les noms de fichiers précédés des dates et triez-les, puis supprimez le préfixe de date. Utilisez
-printf
pour contrôler le format de sortie. imprime une partie du temps de modification déterminé par ; si c'est le cas , vous obtenez le nombre de secondes depuis l'époque Unix. Ci-dessous, j'imprime trois colonnes séparées par des tabulations: l'heure au format triable, le nom du fichier et l'heure au format lisible par l'homme; supprime la première colonne et l'appel pour remplacer l'onglet par suffisamment d'espaces pour accueillir tous les noms de fichiers attendus (ajustez 40 comme vous le souhaitez). Ce code suppose que vous n'avez pas de nouvelles lignes ou d'onglets dans les noms de fichiers.%TX
X
X
@
cut -f 2-
expand
la source
find -newermt "$timestring" -printf '%M@\t%f %Mb %Md %MH:%MM\n'
me donne une sortie amusante-rwxrwxrwx@ S0002975.LOG -rwxrwxrwxb -rwxrwxrwxd -rwxrwxrwxH:-rwxrwxrwxM
%T
pour le mtime, ce%M
sont les permissions.find /tmp -maxdepth 1 -type f -newermt "20130207 00:38:51" -printf '%T@\t%f-%Tb %Td %TH:%TM\n' | sort -k1n | cut -f 2-
le nom et l'heure du fichier séparé,-
car je vais capturer la sortie en php et l'utiliser - comme séparateur. Merci beaucoup.Avec
zsh
:Les
newer
retours de fonction vrai pour les fichiers plus récents que$timestamp
(notez quezsh
l »zstat
ne supporte pas la précision subsecond bien).Ensuite, tout ce que nous faisons est d'utiliser des
zsh
qualificatifs globbing:D
pour inclure des fichiers dot,.
pour ne considérer que les fichiers normaux,Om
pour commander au moment de la modification et+newer
pour appeler lanewer
fonction pour déterminer le fichier à sélectionner.Si vous souhaitez également afficher les horodatages du fichier, vous pouvez passer
newer
à:Notez cependant que le résultat de la génération du nom de fichier inclura les horodatages, ce qui signifie que vous ne pouvez plus les utiliser comme noms de fichiers.
la source
ssh
, par exemple.