encontrar si los archivos en un directorio existen de forma recursiva en otro directorio de forma recursiva en Linux bash e imprimir existe o no existe

encontrar si los archivos en un directorio existen de forma recursiva en otro directorio de forma recursiva en Linux bash e imprimir existe o no existe

encontrar si los archivos en un directorio existen de forma recursiva en otro directorio de forma recursiva en Linux bash e imprimir existe o no existe

digamos que tienes

  • pth1/dirA/file1 pth1/dirA/DirB/file2 y
  • pth2/dirA/file1 pth2/dirA/DirB/file3

quiero un informe que

file1 exists 
files2 dont exist in pth2
files3 dont exist in pth1

Encontré ese código que funciona para el nivel actual para ambos directorios, pero no puedo hacerlo funcionar de forma recursiva.tomado de aquí

pth1="/mntA/newpics";
pth2="/mntB/oldpics";
for file in "${pth1}"/*; do
    if [[ -f "${pth2}/${file##*/}" ]]; then
       echo "$file exists";
    fi
done

¿Cómo puedo hacerlo para que funcione de forma recursiva en ambos caminos?

Respuesta1

Lo hice con otro método. Encuentro todos los archivos en un directorio, elimino su ruta, luego puedo guardar los resultados en dos archivos diferentes y compararlos con meld u otro programa, o puedo comparar los hallazgos directamente con meld.

Tenga en cuenta que ordeno archivos y elijo solo archivos únicos y no duplicados en los resultados. Además, solo me interesan los archivos cuyo nombre termine en la extensión "jpg".

pth1="/mnt/oldfiles";
pth2="/mnt/newfiles";

y luego

(find "${pth1}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )  > a.txt;
(find "${pth2}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )  > b.txt;
meld a.txt b.txt

O directamente

meld <(find "${pth1}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )  <(find "${pth2}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )

ACTUALIZACIÓN: si un directorio es mucho más grande que otro, el comando directo no funciona (MILD se abre sin que ambos comandos finalicen).

Respuesta2

No está muy claro lo que quieres, pero creo que esto será suficiente. Este comando compara todos los archivos /path/1con los de /path/2, verificando su existencia e igualdad.

diff --brief --recursive /path/1 /path/2

Ejemplo resuelto

# Create some files
mkdir -p 1/{x,y} 2/{x,z}
touch 1/{x,y}/file1
date | tee 2/x/file1 >2/z/date

# Show what we have
tree 1 2
1
├── x
│   └── file1
└── y
    └── file1
2
├── x
│   └── file1
└── z
    └── date
4 directories, 4 files

# Compare the two directory trees
diff --brief --recursive 1 2
Files 1/x/file1 and 2/x/file1 differ
Only in 1: y
Only in 2: z

información relacionada