cp /Folder1/*.mov /Folder2/
cp /Folder1/*.mov /Folder3
rm /Folder1/*.mov
Esto se ejecuta cada 60 segundos usando Chron que copia cualquier archivo *.mov de una carpeta a otras 2 carpetas y luego elimina el archivo.
Si el archivo tarda más de 60 segundos en escribirse, el script se ejecuta y copia todo lo que hay en la carpeta y lo corrompe. (O si el script simplemente se ejecuta cuando se está escribiendo un archivo).
¿Cómo puedo hacer una declaración condicional para hacer que el script espere hasta que se complete la escritura del archivo?
Considere crear un bloqueo para anotar la copia en curso, vea bloquear su secuencia de comandos (contra la ejecución en paralelo) :
#!/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
La secuencia de comandos anterior solo se copia si no existe una carpeta en /tmp/copying.lock
.
En lugar de copiar directamente en la ubicación final, considere realizar la copia en una ubicación temporal. Luego mueva los archivos. Un movimiento es rápido, tiende a ser atómico y es menos probable que dañe los archivos.
Alternativamente, puede copiar usando una herramienta como rsync
la que incluye banderas para ayudar a protegerse contra estos problemas.
trap 'rmdir /tmp/copy.lock; exit' 1 6 15
trap
línea por completo. Está allí sólo en caso de problemas. El final rm -f
es responsable de eliminar la carpeta, después de la copia exitosa..command
. A continuación, haga doble clic en el archivo de texto para verlo iniciar en Terminal.app. Debería poder ver mejor los problemas. Cuando eso funcione, puede integrarlo en Chron. Alternativamente, puedo resolver esto con un evento de Power Manager , que escribí.
mateusz szlosek
fd0
mmmmmm
Brian
Brian
Brian
Brian
fd0
Brian
mmmmmm
fd0
Brian