Mi guion es:
#!/bin/bash
# Path to a lock folder
LOCK_PATH="/Volumes/PROOFS_WATCH/copy.lock"
trap 'rmdir "$LOCK_PATH"; exit' 1 6 15
if mkdir "$LOCK_PATH"; then
echo "Lock file did not exist and was created, Copying..."
# Perform commands
cp /Volumes/PROOFS_WATCH/*.mov /Volumes/PROOFS_WATCH/AME_Processing/
cp /Volumes/PROOFS_WATCH/*.mov /Volumes/PROOFS_TV
rm /Volumes/PROOFS_WATCH/*.mov
# Remove the lock
rm -f "$LOCK_PATH"
fi
Mi salida es:
Lock file did not exist and was created, Copying...
cp: /Volumes/PROOFS_WATCH/*.mov: No such file or directory
cp: /Volumes/PROOFS_WATCH/*.mov: No such file or directory
rm: /Volumes/PROOFS_WATCH/*.mov: No such file or directory
rm: /Volumes/PROOFS_WATCH/copy.lock: is a directory
logout
[Process completed]
rm -f
no elimina la carpeta de bloqueo por alguna razón...
Me gustaría que este script se ejecute automáticamente a través de Cron cada 60 segundos. Si se está escribiendo un archivo grande, no quiero que se ejecute hasta que se complete la escritura del archivo.
Me estoy dando cuenta más de lo que se puede hacer con bash y también quiero automatizar más procesos.
Intente usar rmdir
para eliminar la carpeta de bloqueo:
rmdir "$LOCK_PATH"
Para depurar las cp
rutas, pruebe este comando en Terminal.app:
open /Volumes/PROOFS_WATCH/
¿Se abre la carpeta esperada? Juega con la ruta hasta que open
muestre la carpeta esperada en el Finder.
Para depurar la carpeta de bloqueo, intente ejecutar el script en dos ventanas de Terminal.app. ¿Ambos intentan y copian? Intentando agregar una declaración else para ver si mkdir
funciona como se desea:
…
else
echo "Lock exists."
fi
Eche un vistazo a Cómo agregar la verificación de errores a sus scripts de Shell para ayudar a identificar cualquier problema.
En los comentarios a continuación se menciona una nueva restricción: otras aplicaciones pueden estar escribiendo los archivos mientras se ejecuta este script. Este script no puede bloquear otras aplicaciones que cambian o escriben en las carpetas afectadas.
Si se está escribiendo en un archivo, cp
solo verá y copiará un archivo parcial. La próxima vez que se ejecute el script, es probable que el archivo esté completamente disponible y se copie correctamente. Esto puede o no ser aceptable.
Si la copia se produce en el mismo volumen físico, es probable que se pueda evitar. En lugar de una copia, considere crear un enlace físico con la ln
herramienta:
ln <source_file> <target_file>
ln [-Ffhinsv] <source_file> ... <target_dir>
El enlace no copia ningún dato y es casi instantáneo. Cambiar el archivo original o el nuevo archivo vinculado se reflejará en ambos.
Intente crear un enlace duro a mano antes de intentar cambiar el script:
ln /Volumes/PROOFS_WATCH/movie.mov /Volumes/PROOFS_WATCH/AME_Processing/movie.mov
else
sugerencia y cómo agregar más verificación de errores. ¡Espero que esto ayude!
mmmmmm