Copie automaticamente os arquivos recebidos para várias pastas e remova os arquivos de origem

Copie automaticamente os arquivos recebidos para várias pastas e remova os arquivos de origem

Gostaria de saber o script automatizado para copiar arquivos de origem do diretório para vários diretórios e após copiar os arquivos, remover os arquivos de origem do diretório de origem

Temos uma pasta de onde vêm os arquivos .xml. então, no primeiro passo, eu queria copiar esses arquivos desta pasta de origem para outras duas pastas, ou seja, pasta um e pasta dois. A pasta um serve para manter os arquivos apenas para fins de backup e a pasta dois serve para executar outro script para dividir os arquivos xml de acordo com nossa necessidade. Depois de copiar os arquivos, remova os arquivos da pasta de origem

Cumprimentos

Responder1

O script bash a seguir monitorará o diretório de origem em busca de novos arquivos recebidos (ou seja, não copiará ou removerá nenhum arquivo pré-existente) e copie-os para dois diretórios de destino e exclua-os posteriormente ... Você precisa executar o script e mantê-lo em execução antes de começar a receber novos arquivos no diretório de origem (ou seja, o script irá capturar novos arquivos recebidos apenas se já estiver em execução) ... O script usainotifywaitque você precisa instalar primeiro com sudo apt install inotify-tools... Leia os comentários no script e especifique os caminhos primeiro:

#!/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

Responder2

Use cpN-1 vezes e finalmente use mvpela enésima vez.

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

informação relacionada