Copie automáticamente los archivos entrantes a varias carpetas y luego elimine los archivos de origen

Copie automáticamente los archivos entrantes a varias carpetas y luego elimine los archivos de origen

Me gustaría conocer un script automatizado para copiar archivos fuente del directorio a varios directorios y, después de copiar los archivos, eliminar los archivos fuente del directorio fuente.

Tenemos una carpeta donde vienen los archivos .xml. Entonces, en el primer paso quería copiar estos archivos de esta carpeta de origen a otras dos carpetas, es decir, la carpeta uno y la carpeta dos. La carpeta uno es para mantener los archivos solo como copia de seguridad y la carpeta dos es para ejecutar otro script para dividir archivos xml de acuerdo con nuestros requisitos. Después de copiar archivos, elimine los archivos de la carpeta de origen

Saludos

Respuesta1

El siguiente script bash monitoreará el directorio de origen en busca de nuevos archivos entrantes (es decir, no copiará ni eliminará ningún archivo preexistente.) y cópielos en dos directorios de destino y luego elimínelos... Debe ejecutar el script y mantenerlo ejecutándose antes de comenzar a recibir archivos nuevos en el directorio de origen (es decir, el script detectará nuevos archivos entrantes sólo si ya se está ejecutando.) ... El guión utilizainotifywaitque necesita instalar primero con sudo apt install inotify-tools... Lea los comentarios en el script y especifique las rutas primero:

#!/bin/bash

# Specify the full path to the source directory in the line below (keep the last "/").
source_d="/full/path/to/directory/"

# Specify the fullpath to the first destination directory in the line below (keep the last "/").
destination_d1="/full/path/to/directory1/"

# Specify the full path to the second destination directory in the line below (keep the last "/").
destination_d2="/full/path/to/directory2/"

inotifywait -m -q -e close_write "$source_d" |

  while read -r path action file; do
    cp -- "$path$file" "$destination_d1$file"
    cp -- "$path$file" "$destination_d2$file"
    rm -- "$path$file"
  done

Respuesta2

Use cpN-1 veces y finalmente úselo mvpor enésima vez.

cp [files] [folder1] 
cp [files] [folder2]
...
cp [files] [folderN-1]
mv [files] [folderN]

información relacionada