Shell   31-12-2020, 00:44
#1
Buenas!.

Quiero empaquetar el directorio "programación" por completo y crear el archivo en un directorio concreto. No necesito comprimirlo.

He usado esto:

Código:
tar cvf /media/mi_usuario/directorio_destino/programacion.tar Programacion
¿ Cómo puedo asegurarme de que el archivo tar creado contiene "todo" el contenido del directorio Programación ?.
Si quiero contar archivos y directorios del directorio Programación, se puede hacer así.

Código:
find . | wc -l

El resultado es entre directorios y archivos: 89612

Para listar el contenido de un archivo tar en este caso puedo hacer esto:

Código:
tar tvf  programacion.tar

Como la lista de archivo se muestra sin líneas vacías al igual que hace el comando find. Para contar cada una de las líneas que muestra la instrucción anterior puedo hacer:

Código:
tar tvf  programacion.tar | wc -l

Pero observo que me cuenta: 89606

Hay una diferencia de "seis".  ¿ A que puede ser debido ?. ¿ Es una forma correcta ?.

Saludos

Puedo contar los tipos por separados del directorio Programación:

Contar solo los tipo archivos:

Código:
find . -type f | wc -l

Me da: 68665

Contar solo los tipo directorios:

Código:
find . -type d | wc -l

Me da: 20922

Total directorios y archivos: 68665 + 20922 = 89587

Que tampoco tiene que ver con: 89612

Se come 25... Huh

En cuanto a si quiero saber cuantos directorios me muestra la salida del tar con las opciones tvf.
Me muestra el mismo número de directorios usando:

Código:
tar tvf programacion.tar | grep "^d" | wc -l

Ale que es tarde y casi es fin de año.. en que cosas me distraigo. Big Grin

Saludos
Última modificación: 31-12-2020, 01:02 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   01-01-2021, 23:43
#2
Buenas!.

He creado un script de prueba que crea tres directorios y luego en cada directorio crea cinco archivos vacíos

Código:
#!/bin/bash

for argumento in directorio{1..3}
do
    mkdir $argumento
    cd $argumento
    for argumento2 in archivo{1..5}
    do
        touch $argumento2
    done
    cd ..
done
En el comando tar existe un modificador tal como este:
Cita:-d, --diff, --compare      encuentra las diferencias entre un archivo y el  sistema de ficheros

Creo un archivo empaquetado con la estructura de árbol de directorios y archivos creados con el script anterior. Y ahora comparo de esta forma
en el mismo directorio.

Código:
tar dvf ejemplo.tar
Si en los archivos del sistema del directorio1 borro el archivo1 y comparo con el tar. La salida es como esta:
 
Cita:directorio1/
directorio1/archivo5
directorio1/archivo2
directorio1/archivo3
directorio1/archivo4
directorio1/archivo1
tar: directorio1/archivo1: Atención: No se puede efectuar stat: No existe el archivo o el directorio
directorio2/
directorio2/archivo5
directorio2/archivo2
directorio2/archivo3
directorio2/archivo4
directorio2/archivo1
directorio3/
directorio3/archivo5
directorio3/archivo2
directorio3/archivo3
directorio3/archivo4
directorio3/archivo1

Si por un casual se me ocurre crear de nuevo archivo1 en el sistema de archivos y vuelvo a comparar puede decirme algo como esto:
 
Cita:directorio1/archivo1: La fecha de modificación es distinta

Pero lo curioso del tema es que si me da por borrar archivos dentro del tar y comparar con los archivos del sistema, no muestra un mensaje como los anteriores.
En ese caso puede existir en el directorio de archivos del sistema, pero no existir dentro del propio archivo tar.

Si me da por crear en los archivos del sistema del directorio1 un archivo6, tampoco dice nada al comparar con el archivo tar.
Como si solo trabajase con lo que hay dentro del tar.

Cuando se compara los archivos del sistema con el tar con normalidad. Si todo va bien al final del test no suelta ni un Ok.
Solo la lista de archivos.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.