![Compare dos directorios para una determinada extensión y luego mueva los que faltan a un nuevo directorio](https://rvso.com/image/154494/Compare%20dos%20directorios%20para%20una%20determinada%20extensi%C3%B3n%20y%20luego%20mueva%20los%20que%20faltan%20a%20un%20nuevo%20directorio%20.png)
Editando y cambiando la palabrería para que quede más claro. Tengo archivos .dm4 tanto en dirA como en dirB. Mi carpeta de referencia es dirA y quiero enumerar todos los archivos .dm4 que faltan en dirA que están en dirB y luego publicar todos los .dm4 faltantes y junto con los .dm4 existentes del directorio A, en el directorio C, asegurándome así que no me pierda ningún .dm4 que pueda existir en mi dirA y dirB.
Respuesta1
Establezcamos algunas suposiciones:
- Tu caparazón es
bash
- SuDirectorio Aes
dirA
- SuDirectorio Bes
dirB
- SuDirectorio Caún no existe, pero será nombrado
dirC
- Todos los archivos que le interesan existen
dirA
odirB
posiblemente estén duplicados en esos directorios.
La forma más sencilla que se me ocurre es:
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
Eso colocará todos los archivos .dm4 dirC
y producirá una diff
lista de los dos directorios.
Si necesita un nivel de detalle mayor que ese, por favoredita tu preguntapara ser más especifico.
ACTUALIZAR:
Supongamos que tiene estos archivos:
$ ls -1 dir{A,B}/*
dirA/apple.dm4
dirA/banana.dm4
dirA/date.dm4
dirA/fig.dm4
dirB/apple.dm4
dirB/elderberry.dm4
dirB/fig.dm4
dirB/grape.dm4
dirB/huckleberry.dm4
Observe que algunos archivos están duplicados, algunos solo están en formato dirA
, otros solo están en formato dirB
. Ninguno de los directorios tiene un cherry.dm4
archivo, por si sirve de algo.
Y supongamos también que tienes un script foo.sh:
$ cat << EOF > foo.sh; chmod 755 foo.sh
#!/usr/bin/env bash
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
EOF
Correr foo.sh
produce:
$ ./foo.sh
2,3c2
< banana.dm4
< date.dm4
---
> elderberry.dm4
4a4,5
> grape.dm4
> huckleberry.dm4
$ ls -1 dirC/*
dirC/apple.dm4
dirC/banana.dm4
dirC/date.dm4
dirC/elderberry.dm4
dirC/fig.dm4
dirC/grape.dm4
dirC/huckleberry.dm4
El diff
resultado le indica que los archivos .dm4 que faltan dirA
son elderberry
, grape
y huckleberry
. Todos los archivos encontrados endirA
o dirB
están presentes en dirC
.
Respuesta2
Copie todos los archivos de dirA a dirC
cp dirA/*.dm4 dirC
Luego copie todos los archivos de dirB, omitiendo los archivos existentes en dirC
cp -n dirB/*.dm4 dirC/
Página de manual para cp
:
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
Nota: -n
solo busca nombres de archivos; para buscar versiones, la -u
opción pdate puede ser interesante.