Comparar carpeta con tarball

Comparar carpeta con tarball

Tengo una estructura de directorios como esta.

Code
├── cse701.tgz
└── cse701
    ├── cse701.md
    ├── CSE701.md
    ├── CSE701_pandoc.md
    ├── cse701.pdf
    ├── cse.pdf
    ├── default.yaml
    ├── html2tex.log
    ├── test.md
    └── missing.md

Y el tarball tiene una estructura como:

drwxrwxr-x zenith/zenith     0 2020-12-02 20:18 cse701/
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/default.yaml
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/CSE701.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/CSE701_pandoc.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/html2tex.log
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/test.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse701.pdf
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse.pdf
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse701.md
tar --diff -zf cse701.tgz  cse701/
tar --compare -zf cse701.tgz  ./cse701/

Las opciones de diferenciación y comparación como se muestran enesta publicaciónDebo señalar que falta un archivo del disco que no está en el tarball.

sin embargo, eldocumentos de alquitrán gnudice que mostrará si los archivos han sido modificados, pero ignorará los archivos en el sistema de archivos que no tengan miembros correspondientes en el archivo. Si un archivo está representado en el archivo pero no existe en el sistema de archivos, tar informa una diferencia.

Entonces, ¿cómo puedo saber si se agregaron archivos nuevos a la carpeta después de crear el tarball?

Respuesta1

Esto no es una sola línea, pero hace lo que quieres:

cd /path/to/Code
tar -tf cse701.tgz | sed 's#/$##' >tgz
find cse701 >fs
diff -uw fs tgz
rm fs
rm tgz

Explicación:

  • Primero cambiamos al directorio correspondiente.
  • Luego enumeramos el contenido tar.gz, eliminando /es al final de la línea ( tar -tlos coloca allí para los directorios)
  • Luego encontramos todos los archivos y directorios en el subárbol del sistema de archivos correspondiente ( findcolocaNo /es al final)
  • Diferenciamos esas dos listas
  • y limpiar

información relacionada