web-dev-qa-db-fra.com

Compter le nombre de fichiers dans un dossier par jour

Je peux trouver le nombre de tous les fichiers dans le dossier, mais j'ai un assez grand nombre.

find . -type f | wc -l      #find number of files in DIR
ls -lrt                     #list all files order by date  

Comment trouver le nombre de fichiers par jour?

Donc, le résultat devrait être quelque chose comme:

# left number is number of files and right is one day.

109294 2016-06-27
101555 2016-06-26
88123  2016-06-25 
... etc. 
11
tasmaniski

Vous pouvez le faire en utilisant l'action printf de find pour n'imprimer que les heures de modification au format souhaité, puis en utilisant sort et uniq:

find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
  • -printf '%TY-%Tm-%Td\n' imprime l'heure de modification des fichiers, par exemple. 2015-05-23 format

  • sort trie la sortie et uniq -c effectue le décompte par date

Exemple:

~/foobar% find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
      3 2004-06-29
      1 2004-08-23
      1 2004-09-15
      1 2004-09-18
      1 2005-07-24
      1 2006-02-05
      2 2008-06-25
      3 2008-12-31
      1 2009-03-13
      1 2009-04-30
      1 2010-04-04
      2 2010-09-01
      8 2011-07-13
     15 2011-08-27
      3 2011-11-03
      3 2014-10-08
20
heemayl

Voici une solution avec find + awk

find . -maxdepth 1 -type f -printf '%TY-%Tm-%Td\n' | awk '{array[$0]+=1}END{ for(val in array) print val" "array[val]   }'

En gros, nous trouvons tous les fichiers normaux et imprimons leur heure de modification comme indiqué par le format %T, puis awk prend le relais et compte chaque ligne à l'aide de tableaux associés. l'instruction END{} utilise la boucle for pour parcourir tous les éléments du tableau associé, et imprimer le contenu clé + tableau [clé] (qui correspond à la date + compte).

Vous souhaiterez peut-être utiliser sort pour organiser la sortie, en particulier sort -k 1 en fonction de la colonne 1 (qui est la date), mais cela est facultatif. De plus, -maxdepth 1 recherchera des fichiers niquement dans le dossier actuel. Si vous souhaitez également rechercher des fichiers dans des sous-répertoires, supprimez la partie -maxdepth 1.

Échantillon de sortie

$ find . -maxdepth 1 -type f -printf '%TY-%Tm-%Td\n' | awk '{array[$0]+=1}END{ for(val in array) print val" "array[val]   }'

2015-09-29 1
2016-04-06 2
2016-04-07 10
2016-04-08 2
2015-11-05 2
2016-04-22 2
2016-04-23 6
2016-04-24 1
2015-11-21 2
2015-11-22 2
4