cp /Folder1/*.mov /Folder2/
cp /Folder1/*.mov /Folder3
rm /Folder1/*.mov
Dies wird alle 60 Sekunden mit Chron ausgeführt, das eine beliebige *.mov-Datei von einem Ordner in 2 andere Ordner kopiert und dann die Datei entfernt.
Wenn das Schreiben der Datei länger als 60 Sekunden dauert, wird das Skript ausgeführt und alles im Ordner kopiert und beschädigt. (Oder wenn das Skript gerade ausgeführt wird, wenn eine Datei geschrieben wird.)
Wie kann ich eine bedingte Anweisung machen, damit das Skript wartet, bis das Schreiben der Datei abgeschlossen ist?
Erwägen Sie, eine Sperre zu erstellen, um die laufende Kopie zu notieren, siehe Ihr Skript sperren (gegen parallele Ausführung) :
#!/bin/sh
# Path to a lock folder
LOCK_PATH="/tmp/copying.lock"
# Ensure the lock is removed should the copy fail
trap 'rmdir "/tmp/copying.lock"; exit' 1 6 15
if mkdir "$LOCK_PATH"; then
# Lock file did not exist and was created
# Perform commands
cp /Folder1/*.mov /Folder2/
cp /Folder1/*.mov /Folder3
rm /Folder1/*.mov
# Remove the lock
rmdir "$LOCK_PATH"
fi
Das obige Skript kopiert nur, wenn kein Ordner unter existiert /tmp/copying.lock
.
Anstatt direkt an den endgültigen Speicherort zu kopieren, sollten Sie die Kopie an einem temporären Speicherort erstellen. Verschieben Sie dann die Dateien. Eine Bewegung ist schnell, tendenziell atomar und beschädigt die Dateien weniger wahrscheinlich.
Alternativ können Sie mit einem Tool kopieren, rsync
das Flags zum Schutz vor diesen Problemen enthält.
trap 'rmdir /tmp/copy.lock; exit' 1 6 15
trap
Linie vollständig zu entfernen. Es ist nur bei Problemen da. Das Finale rm -f
ist für das Entfernen des Ordners zuständig – nach dem erfolgreichen Kopieren..command
. Doppelklicken Sie als Nächstes auf die Textdatei, um sie in Terminal.app zu starten. Sie sollten in der Lage sein, Probleme besser zu sehen. Wenn das funktioniert, können Sie es in Chron integrieren. Alternativ kann ich das mit einem Power Manager Event lösen – das ich geschrieben habe.
Mateusz Szlosek
fd0
mmmmmm
Brian
Brian
Brian
Brian
fd0
Brian
mmmmmm
fd0
Brian