Je tente de copier un répertoire contenant un grand nombre de fichiers vers une autre destination. J'ai fait:
cp -r src_dir another_destination/
Ensuite, je voulais confirmer que la taille du répertoire de destination est la même que celle d'origine:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Ensuite, j'ai pensé qu'il pourrait y avoir plusieurs liens symboliques qui ne sont pas suivis par la cp
commande et j'ai ajouté le -a
drapeau:
-a Identique aux options -pPR. Préserve la structure et les attributs des fichiers mais pas la structure des répertoires.
cp -a src_dir another_destination/
mais du -s
m'a donné les mêmes résultats. Il est intéressant que la source et la destination aient le même nombre de fichiers et de répertoires:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
Que fais-je de mal à obtenir différentes tailles avec la du
commande?
MISE À JOUR
Lorsque j'essaie d'obtenir des tailles de répertoires individuels avec la du
commande, j'obtiens des résultats différents:
du -s src_dir/sub_dir1
1112 src_dir/sub_dir1
du -s another_destination/src_dir/sub_dir1
1168 another_destination/src_dir/sub_dir1
Lorsque je consulte des fichiers avec ls -la
, les tailles de fichier individuelles sont les mêmes, mais les totaux sont différents:
ls -la src_dir/sub_dir1
total 1168
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
ls -la another_destination/src_dir/sub_dir1
total 1112
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
la source
ls -la
résultats. Voir MISE À JOURcp
sont exactement aussi volumineux qu'ils doivent l'être.ls -ls
pour voir combien d'espace disque les fichiers utilisent.Réponses:
En effet,
du
par défaut, la taille des fichiers n'est pas affichée, mais l'espace disque qu'ils utilisent. Vous devez utiliser l'-b
option pour obtenir la somme des tailles de fichier, au lieu du total de l'espace disque utilisé. Par exemple:Même si le fichier ne fait que 7 octets, il occupera un total de 4096 octets d'espace disque (dans mon exemple particulier; il variera en fonction du système de fichiers utilisé, de la taille du cluster, etc.).
De plus, certains systèmes de fichiers prennent en charge les fichiers dits clairsemés, qui n'utilisent pas d'espace disque pour les blocs qui sont tous des zéros. Par exemple:
En bref, pour vérifier que tous les fichiers ont été copiés, vous devez utiliser à la
du -sb
place dedu -s
.la source
du
sortie: cela rendrait les fichiers compressés rares aux programmes qui utilisent l'algorithme habituel de longueur! = blocs utilisés. btrfs.wiki.kernel.org/index.php/…Cela peut être dû à la taille du répertoire "fichiers".
Dans la plupart des systèmes de fichiers, sur disque, un répertoire ressemble beaucoup à un fichier normal (avec juste une liste de noms et de numéros de nœuds, principalement), utilisant plus de blocs à mesure qu'il grandit.
Si vous ajoutez de nombreux fichiers, le répertoire lui-même s'agrandit. Mais si vous les supprimez ensuite, dans de nombreux systèmes de fichiers, le répertoire ne rétrécira pas.
Donc, si l'un des répertoires de votre arborescence d'origine contenait à un moment donné de nombreux fichiers, qui ont ensuite été supprimés, la copie de ce répertoire sera "plus petite", car elle utilise uniquement autant de blocs que nécessaire pour le nombre actuel de fichiers.
Dans les listes de votre mise à jour, il y a 3 répertoires que vous n'avez pas répertoriés. Comparez la taille de ceux (ou de leurs descendants) dans votre
ls -al
sortie.Pour trouver où se trouve la différence, vous pouvez essayer un
ls -alr
sur les deux répertoires, redirigé vers un fichier, puis l'unediff
des deux sorties.la source
cp -a src_dir another_destination/
il est peu probable, car ilanother_destionation
serait nouvellement créé et donc optimisé, tandis quesrc_dir
(qui aurait pu avoir des répertoires plus grands de la création / des ajouts précédents) pourrait en effet être plus grand que nécessaire. Cependant, les résultats montrent qu'ilsrc_dir
est en fait plus petit (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
. En fait, ce sont des fichiers, pas des répertoires. voir les noms de fichiers> if one of the directories in your original tree had many files at some point, which were later deleted
. J'ai copié le répertoire source d'un serveur distant avec la commande rsync et n'y ai rien supprimé.
entrées affichent 5 liens sur l'inode. L'un est le lien du répertoire parent vers celui-ci. Un autre est.
. Il y a 3 autres liens, qui devraient être des..
liens de sous-répertoires. Sauf si je manque quelque chose de très bizarre, il doit y avoir 3 sous-répertoires dans ceux-ci. Voulez-vous dire que ces listes sont la sortie complète?