Restar archivos en la carpeta A de la carpeta B

2

Tengo la carpeta A con 8000 imágenes y la carpeta B con 9000 imágenes. La carpeta B contiene las 8000 imágenes de la carpeta A, así como 1000 imágenes adicionales. Me gustaría eliminar las 8000 imágenes que ya están en la Carpeta A, dejando solo las "nuevas" 1000 imágenes.

¿Alguien sabe una manera elegante de hacer el trabajo? (por cierto. No puedo ordenarlos por fecha y obtener los más nuevos)

    
pregunta b101 13.09.2017 - 14:33

4 respuestas

2

Puedes usar un script bash simple para hacer esto ::

for file in *.*; do if [ -f "/FolderA/${file}" ]; then rm "/FolderB/$file"; fi; done;

Este script asume que ya estás en FolderB, que es donde quieres eliminar los archivos que ya existen en FolderA.

Puede modificarlo si conoce la extensión de los archivos de imagen (es decir, .png, .gif, etc.) y tiene los nombres de carpeta exactos. Así que en lugar de *.* puedes usar *.png o *.gif .

Una versión MUCHO más segura:

for file in *.*; do if [ -f "/FolderA/${file}" ]; then mv "/FolderB/$file" ~/.Trash; fi; done;

Esto moverá el archivo a la Papelera. Usar rm es una calle de una sola vía. Una vez que presionas enter en un comando rm , se hace; ese archivo se ha ido para siempre. Mueva a la Papelera para asegurarse de que obtiene los resultados que está buscando.

    
respondido por el Allan 13.09.2017 - 15:17
1

Si ha instalado el GNU findutils a través de homebrew, puede cd a folderB en la terminal e ingresar

echo rm $(find /path/to/folderA -type f -printf "%P\n")

Comprueba la salida. Si enumera los archivos que desea eliminar, repita sin el echo para eliminar realmente los archivos.

El find predeterminado del sistema no tiene -printf , pero está escribiendo

echo rm $(find /path/to/folderA -type f -execdir {} \; )

(también emitido desde folderB !) debe hacer el mismo trabajo (no se puede probar aquí).

    
respondido por el Philippos 13.09.2017 - 15:02
1
  • Cree un duplicado de la carpeta A: copia A
  • Abre la Terminal e ingresa touch -mt 200001010000 /path/to/A-copy/*.*
  • Mueva los archivos de A (copiar) a B y reemplace los archivos existentes allí.
  • Ordene los archivos en la carpeta B por fecha de modificación.
  • Eliminar todos los archivos con la fecha mod 1 de enero de 2000 en la carpeta B

Esto no modificará las fechas de modificación de los archivos originales en la carpeta a.

Si la carpeta A ya contiene archivos con fecha de modificación del 1 de enero de 2000, elija otra fecha en el paso 2.

    
respondido por el klanomath 13.09.2017 - 15:07
-1

Si la carpeta B tiene todas las imágenes de la carpeta A más 1000 adicionales, simplemente borre la carpeta A!

¡Simples!

Sin embargo, si tiene la carpeta B tiene 9000 imágenes y la carpeta A tiene 9000 imágenes, pero existe una disparidad entre ellas porque la carpeta B no tiene todas las imágenes de la carpeta A, entonces use diff para encontrar la diferencia.

Habiendo dicho eso, esto solo será una diferencia de nombre de archivo. Es posible que tenga dos imágenes que compartan el mismo nombre, ¡lo cual es un problema completamente diferente!

El código:

diff -rq folder1 folder2

  

La r le dice a diff que mire recursivamente cada directorio, incluidos los subdirectorios. El interruptor q establece el modo de modo breve. Si no configuramos el modo breve, diff no solo le dirá qué archivos son diferentes entre las dos carpetas, sino que también mostrará las diferencias reales línea por línea para cualquier archivo de texto que exista en ambas ubicaciones pero que no sea idéntico.

    
respondido por el chriszanf 13.09.2017 - 14:59

Lea otras preguntas en las etiquetas