Estoy tratando de copiar un directorio con una gran cantidad de archivos a otro destino. Yo hice:
cp -r src_dir another_destination/
Entonces quería confirmar que el tamaño del directorio de destino es el mismo que el original:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Luego pensé que podría haber varios enlaces simbólicos que no fueran seguidos por el cp
comando y agregué la -a
bandera:
-a Igual que las opciones -pPR. Conserva la estructura y los atributos de los archivos, pero no la estructura del directorio.
cp -a src_dir another_destination/
pero du -s
me dio los mismos resultados. Es interesante que tanto el origen como el destino tengan la misma cantidad de archivos y directorios:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
¿Qué estoy haciendo mal que obtengo diferentes tamaños con el du
comando?
ACTUALIZAR
Cuando intento obtener tamaños de directorios individuales con el du
comando obtengo resultados diferentes:
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
Cuando veo archivos con ls -la
, los tamaños de archivo individuales son los mismos pero los totales son diferentes:
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
fuente
ls -la
resultados. Ver ACTUALIZACIÓNcp
son exactamente tan grandes como deben ser.ls -ls
para ver cuánto espacio en disco están usando los archivos.Respuestas:
Esto se debe a que,
du
de manera predeterminada, no muestra el tamaño de los archivos, sino el espacio en disco que están utilizando. Debe usar la-b
opción para obtener la suma de los tamaños de archivo, en lugar del total del espacio en disco utilizado. Por ejemplo:Aunque el archivo tiene solo 7 bytes de longitud, ocupará un total de 4096 bytes de espacio en disco (en mi ejemplo particular; variará según el sistema de archivos utilizado, el tamaño del clúster, etc.).
Además, algunos sistemas de archivos admiten los llamados archivos dispersos, que no utilizan ningún espacio en disco para bloques que son todos ceros. Por ejemplo:
En resumen, para verificar que todos los archivos fueron copiados, usaría en
du -sb
lugar dedu -s
.fuente
du
salida: eso haría que los archivos comprimidos se vean dispersos para los programas que usan el algoritmo habitual de longitud! = bloques usados. btrfs.wiki.kernel.org/index.php/…Puede deberse al tamaño del directorio "archivos".
En la mayoría de los sistemas de archivos, en el disco, un directorio es muy parecido a un archivo normal (con solo una lista de nombres y números de nodo, en su mayoría), utilizando más bloques a medida que crece.
Si agrega muchos archivos, el directorio en sí crece. Pero si luego los elimina, en muchos sistemas de archivos, el directorio no se reducirá.
Entonces, si uno de los directorios de su árbol original tenía muchos archivos en algún momento, que luego se eliminaron, la copia de ese directorio será "más pequeña", ya que solo usa tantos bloques como sea necesario para la cantidad actual de archivos.
En los listados de su actualización, hay 3 directorios que no ha enumerado. Compare el tamaño de esos (o descendientes de esos) en su
ls -al
salida.Para encontrar la diferencia, puede probar un
ls -alr
en ambos directorios, redirigido a un archivo y luego unadiff
de las dos salidas.fuente
cp -a src_dir another_destination/
, es poco probable, yaanother_destionation
que se crearía nuevamente y, por lo tanto, se optimizaría, mientrassrc_dir
que (que podría haber tenido algunos directorios más grandes de creaciones / adiciones anteriores) podría ser más grande de lo necesario. Sin embargo, los resultados muestran que ensrc_dir
realidad es más pequeño (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
. En realidad son archivos, no directorios. ver los nombres de los archivos> if one of the directories in your original tree had many files at some point, which were later deleted
. Copié el directorio fuente de un servidor remoto con el comando rsync y no.
entradas muestran 5 enlaces en el inodo. Uno es el enlace del directorio principal a este. Otro es.
. Hay 3 enlaces más, que deberían ser..
enlaces de subdirectorios. A menos que me falte algo muy extraño, debe haber 3 subdirectorios en ellos. ¿Estás diciendo que esos listados son la salida completa?