J'utilise rsnapshot pour les sauvegardes, qui génère une série de dossiers contenant des fichiers du même nom. Certains des fichiers sont liés durs, tandis que d'autres sont séparés. Par exemple, hourly.1/file1
et hourly.2/file1
peut être lié difficile au même fichier, tandis que hourly.1/file2
et hourly.2/file2
sont des fichiers entièrement séparés.
Je veux trouver la quantité d'espace utilisé par le dossier hourly.2
ignorer tous les fichiers qui sont des liens difficiles à des fichiers dans hourly.1
. Donc, dans l'exemple ci-dessus, je voudrais obtenir la taille de fichier2, mais ignorer le fichier1.
J'utilise Bash sur Linux et je veux le faire à partir de la ligne de commande aussi simple que possible, donc aucune solution graphique ou d'autres systèmes d'exploitation uniquement.
Taille totale en octets de tous les fichiers de hourly.2
qui n'a qu'un seul lien:
$ find ./hourly.2 -type f -links 1 -printf "%s\n" | awk '{s=s+$1} END {print s}'
De find
man-page:
-links n
File has n links.
Pour obtenir la somme en kilo-octets au lieu d'octets, utilisez -printf "%k\n"
Pour répertorier les fichiers avec différents comptes de lien, jouez avec find -links +1
(plus d'un lien), find -links -5
(moins de cinq liens) et ainsi de suite.
Comme @gilles dit, puisque du
_ Nume que le premier de tous les hardlinks pointant vers la même inode qu'il rencontre, vous pouvez lui donner des répertoires d'affilée:
$ du -hc --max-depth=0 dirA dirB
29G /hourly.1
1G /hourly.2
30G total
C'est à dire. Tout fichier dans 'Hourly.2' Référencer une inode (AKA "Real" Fichier) déjà référencé dans "Hourry.1", ne sera pas compté.
Plus simple
du -hc --max-depth=1 path/
Exemple
9.4G daily/users/rockspa/home/daily.21
3.6G daily/users/rockspa/home/daily.30
4.2G daily/users/rockspa/home/daily.11
1.1G daily/users/rockspa/home/daily.4
4.2G daily/users/rockspa/home/daily.9
3.0G daily/users/rockspa/home/daily.25
3.5G daily/users/rockspa/home/daily.20
4.2G daily/users/rockspa/home/daily.13
913M daily/users/rockspa/home/daily.5
2.8G daily/users/rockspa/home/daily.26
1.4G daily/users/rockspa/home/daily.1
2.6G daily/users/rockspa/home/daily.28
4.2G daily/users/rockspa/home/daily.15
3.8G daily/users/rockspa/home/daily.19
327M daily/users/rockspa/home/daily.8
4.2G daily/users/rockspa/home/daily.17
3.1G daily/users/rockspa/home/daily.23
...
Les constructions de find
sont fournies sans -printf
Support. Voici une modification à @ Grebneke's Resole :
find . -type f -links 1 -exec ls -l {} \;| awk '{s=s+$5} END {print s}'