2009-01-18 11 views
9

he movido un sitio web desde un servidor a otro y que se copiaron los archivos utilizando SCP¿Cómo puedo comprobar que dos carpetas son los mismos en Linux

ahora deseo para comprobar que todos los archivos se han copiado OK .

¿Cómo comparo los sitios?

¿Contar archivos para una carpeta?

¿Tiene el tamaño total de archivo para el árbol de carpetas?

o existe una forma mejor de comparar los sitios?

Paul

Respuesta

11

Si estaba utilizando SCP, que probablemente se podría haber utilizado rsync.

rsync no transferirá archivos que ya están actualizados, por lo que puede usarlo para verificar que una copia sea actual simplemente ejecutando rsync nuevamente.

si estuviera haciendo algo como esto en el anfitrión de edad:

scp -r from/my/dir newhost:/to/new/dir 

entonces usted podría hacer algo así como

rsync -a --progress from/my/dir newhost:/to/new/dir 

El '-a' es la abreviatura de 'archivo' que hace un copia recursiva y conserva permisos, propiedades, etc. Consulte man page para obtener más información, ya que puede hacer muchas cosas inteligentes.

0

sumas de control hará para todos los archivos, por ejemplo usando md5sum. Si todos son iguales para todos los archivos y no falta ningún archivo, todo está bien.

0

Pruebe diffing su directorio recursivamente. Obtendrá un buen resumen si algo es diferente en uno de los directorios.

7
cd website 
find . -type f -print | sort | xargs sha1sum 

producirá una lista de sumas de comprobación para los archivos. A continuación, puede ver diff para ver si faltan archivos/agregados/diferentes.

2

tal vez usted puede usar algo similar a esto:

find <original root dir> | xargs md5sum > original 
find <new root dir> | xargs md5sum > new 
diff original new 
1

Si utilizó SCP, es probable que también se puede utilizar rsync sobre ssh.

rsync -avH --delete-after 1.example.com:/path/to/your/dir 2.example.com:/path/to/your/ 

rsync hace las sumas de comprobación para usted.

Asegúrese de utilizar la opción -n para ejecutar en seco. Verifique la página del manual.

Prefiero rsync sobre scp o incluso cp local, cada vez que puedo usarlo.

Si rsync no es una opción, md5sum puede generar compendios md5 y md5sumc --check los controlará.

0

he sido mover un sitio web desde un servidor a otro He copiado los archivos utilizando SCP

usted puede hacer esto con rsync, que es grande si sólo desea reflejar algo.

/Johan

Actualización: Parece que @rjack me golpeó con la respuesta rsync con 6 segundos :-)

19

Usando diff con la recursiva -r y la opción -q rápida. Es la mejor y, por lejos, la forma más rápida de hacerlo.

diff -r -q /path/to/dir1 /path/to/dir2 

No le dirá cuáles son las diferencias (quitar la opción -q para ver eso), sino que le dice muy rápidamente si todos los archivos son los mismos.

Si no muestra salida, todos los archivos son los mismos, de lo contrario, mostrará una lista de los archivos que son diferentes.

+0

funciona. Pero la descripción que le diste puede ser incorrecta. ¿Quieres decir "No se mostrará si los archivos son iguales y muestra si hay una diferencia" – smilyface

+0

Gracias smilyface, he actualizado la descripción para que quede más claro. – phayes

0

Me gustaría agregar esto a Douglas Leeder o Eineki, pero lamentablemente, no tienen la reputación suficiente para comentar. De todos modos, sus respuestas son geniales, excepto que no funcionan para nombres de archivos con espacios. Para hacer que el trabajo, hacer

find [dir1] -type f -print0 | xargs -0 [preferred hash function] > [file1] 

find [dir2] -type f -print0 | xargs -0 [preferred hash function] > [file2] 

diff -y [file1] [file2] 

Sólo a partir de la experimentación, también me gusta usar la -W ### argumento de diferencias y de salida en un archivo, más fácil de analizar y comprender en el terminal.

+0

este método no podrá verificar los directorios vacíos, y debe ordenar el resultado. – zidarsk8

0

Para agregar una respuesta de Sidney. No es muy necesario filtrar -type f, y producir código hash. En respuesta a zidarsk8, no es necesario ordenar, ya que find, igual que ls, ordena alfabéticamente los nombres de los archivos por defecto. Funciona también para directorios vacíos.

En resumen, 3 mejores respuestas serían: (Niza P. S. hacer un ensayo con rsync)

diff -r -q /path/to/dir1 /path/to/dir2 

diff <(cd dir1 && find) <(cd dir2 && find) 

rsync --dry-run -avh from/my/dir newhost:/to/new/dir 
Cuestiones relacionadas