Script Bash con problemi della cartella di blocco per file di grandi dimensioni

2

Il mio script è:

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

Il mio risultato è:

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 non rimuove la cartella di blocco per qualche motivo ...

Vorrei che questo script si avvii automaticamente tramite Cron ogni 60 secondi. Se viene scritto un file di grandi dimensioni, non voglio che venga eseguito fino al completamento della scrittura del file.

Sto realizzando più di quello che può essere fatto con bash e voglio automatizzare anche più processi.

    
posta Brian 04.08.2015 - 20:42
fonte

1 risposta

1

Correzione della rimozione del blocco

Prova a usare rmdir per rimuovere la cartella di blocco:

rmdir "$LOCK_PATH"

Debugging Paths

Per eseguire il debug dei percorsi cp , prova questo comando in Terminal.app:

open /Volumes/PROOFS_WATCH/

La cartella prevista è aperta? Gioca con il percorso fino a quando open mostra la cartella prevista nel Finder.

Per eseguire il debug della cartella di blocco, prova a eseguire lo script in due finestre di Terminal.app. Entrambi provano e copiano? Sto cercando di aggiungere un'altra istruzione per vedere se mkdir funziona come desiderato:

…
else
    echo "Lock exists."
fi

Debug degli script di shell

Dai un'occhiata a Come aggiungere il controllo degli errori agli script della shell per identificare eventuali problemi.

Collegamenti duri

Menzionato nei commenti sotto è un nuovo vincolo: altre applicazioni potrebbero scrivere i file mentre questo script è in esecuzione. Questo script non può bloccare altre applicazioni che cambiano o scrivono nelle cartelle interessate.

Se viene scritto un file, cp vedrà e copierà solo un file parziale. Al prossimo avvio dello script, il file sarà probabilmente completamente disponibile e copiato correttamente. Questo può o non può essere accettabile.

Se la copia si verifica sullo stesso volume fisico, è probabile che la copia venga evitata. Al posto di una copia, prendi in considerazione la creazione di un collegamento reale con lo sviluppatore ln strumento:

ln <source_file> <target_file>
ln [-Ffhinsv] <source_file> ... <target_dir>

Il collegamento non copia alcun dato ed è quasi istantaneo. La modifica del file originale o del file appena collegato si rifletterà in entrambi.

Prova a creare un hard link a mano prima di provare a cambiare lo script:

ln /Volumes/PROOFS_WATCH/movie.mov /Volumes/PROOFS_WATCH/AME_Processing/movie.mov
    
risposta data 04.08.2015 - 20:55
fonte

Leggi altre domande sui tag