J'ai un répertoire contenant beaucoup de photos. Plus précisément, du -sh --apparent-size /path/to/myfolder
me donne 331G. Qui est genial. Mais maintenant, je veux obtenir une liste groupée par mois, par exemple quelque chose comme ceci:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
Existe-t-il un moyen (raisonnable) de le faire avec les extensions Linux, ou dois-je simplement écrire mon propre utilitaire Python pour le faire?
shell
files
disk-usage
Wayne Werner
la source
la source
Réponses:
Sur Linux, essayez:
Comment ça fonctionne
find /my/path
Cela recherche les fichiers dans / mon / chemin.
-maxdepth 1
Cela indique de
find
ne pas regarder dans les sous-répertoires. (Si vous souhaitez une recherche récursive, omettez cette option.)-type f
Cela indique
find
de limiter la recherche aux fichiers normaux.-printf '%TY-%Tm %s\n'
Cela indique
find
d'imprimer l'année-mois suivi de la taille en octets pour chaque fichier.Comme nous ne les utilisons pas, les noms des fichiers trouvés ne sont pas imprimés.
b[$1]+=$2
Pour chaque fichier trouvé, nous ajoutons son nombre d'octets, trouvé dans la colonne 2, au nombre de cette combinaison année-mois dans le tableau associatif
b
.END{for (date in b) print date, b[date]}
Après avoir traité toutes les sorties de
find
, nous imprimons les résultats.sort
Cela trie les résultats par ordre de date.
Version à plusieurs lignes
Pour ceux qui préfèrent leur code étalé sur plusieurs lignes:
Exemple
Prenons un répertoire avec ces fichiers:
La sortie de notre commande est:
Raffinements
Si nous voulons la sortie en mégaoctets (MiB) au lieu d'octets, nous pouvons convertir les unités comme ceci:
Nous pouvons obtenir encore plus de contrôle sur le format de sortie en utilisant
printf
. Ici, pour ne conserver qu'un chiffre après le point décimal, nous formaterons la taille avec%5.1f
:la source
printf "%s %9d\n", date, b[date]
au lieu deprint date, b[date]
pour ajouter un remplissage d'espace à la deuxième colonneprintf
.find
que des supports-maxdepth
vous probablement avoir[g]awk
que des supportsPROC_INFO["sorted_in"]="@ind_str_asc"