Eingehende Dateien automatisch in mehrere Ordner kopieren und dann die Quelldateien entfernen

Eingehende Dateien automatisch in mehrere Ordner kopieren und dann die Quelldateien entfernen

Ich würde gerne ein automatisiertes Skript kennen, mit dem Quelldateien aus einem Verzeichnis in mehrere Verzeichnisse kopiert werden und nach dem Kopieren der Dateien die Quelldateien aus dem Quellverzeichnis entfernt werden

Wir haben einen Ordner, in den die XML-Dateien kommen. Im ersten Schritt wollte ich diese Dateien aus diesem Quellordner in zwei weitere Ordner kopieren, nämlich Ordner eins und Ordner zwei. Ordner eins dient nur zum Speichern der Dateien als Sicherung und Ordner zwei dient zum Ausführen eines weiteren Skripts zum Aufteilen von XML-Dateien entsprechend unseren Anforderungen. Entfernen Sie nach dem Kopieren der Dateien die Dateien aus dem Quellordner

Grüße

Antwort1

Das folgende Bash-Skript überwacht das Quellverzeichnis auf eingehende neue Dateien (d. h. es werden keine bereits vorhandenen Dateien kopiert oder entfernt) und kopieren Sie sie in zwei Zielverzeichnisse. Löschen Sie sie anschließend ... Sie müssen das Skript ausführen und am Laufen halten, bevor Sie neue Dateien im Quellverzeichnis empfangen (Das Skript wird neue eingehende Dateien nur dann erfassen, wenn es bereits ausgeführt wird.) ... Das Skript verwendetinotifywaitdie du vorher mit ... installieren musst sudo apt install inotify-tools. Lies bitte die Kommentare im Script und gib vorher die Pfade an:

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

Antwort2

Verwenden Sie cpes N-1-mal und schließlich mvzum N-ten Mal.

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

verwandte Informationen