Non molto efficiente, ma potresti fare:
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
Questo è verificare che il file non è elencato con un writo amodalità ccesso nel lI st di openna files prima mo ving.
L' psmiscimplementazione di fusercome si trova tipicamente sui sistemi operativi basati su Linux ha una -wfunzione (per verificare la presenza di file aperti per la scrittura) ma sfortunatamente funziona solo -kper uccidere i processi corrispondenti. Tuttavia, sembra che tu possa ancora usarlo usando lo pseudo-segnale 0 che non fa nulla:
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
Rimuovere -s(o addirittura sostituirlo con -v) se si desidera vedere quali processi impediscono lo spostamento.
Nota che se non esegui questi comandi come superutente, otterrai solo informazioni sui tuoi processi. Se i processi di download dei file sono in esecuzione come utente diverso, rimarranno inosservati.
Si noti inoltre che, a meno che non si stiano spostando i file in un file system diverso, lo spostamento dei file non impedirà a qualsiasi processo che sta scrivendo sul file di finire di scriverlo.
Tuttavia, a seconda di quello che sono stati progettati per fare in seguito, potrebbero essere confuse se al termine della scrittura, il file non è più lì (ad esempio, se vogliono cambiare alcuni attributi del file dopo il download e così fanno non tramite il descrittore di file (come chmod()vs fchmod(), o utimes()che non può essere fatto tramite un descrittore di file)).
%.partrinominarlo in%). Quindi se il downloader si comporta bene (non fa altro), dovresti essere in grado di rinominare imvfile ( ).