
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
ypth2/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/1
con 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