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 w
rito a
modalità ccesso nel l
I s
t di o
penna f
iles prima m
o v
ing.
L' psmisc
implementazione di fuser
come si trova tipicamente sui sistemi operativi basati su Linux ha una -w
funzione (per verificare la presenza di file aperti per la scrittura) ma sfortunatamente funziona solo -k
per 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)).
%.part
rinominarlo in%). Quindi se il downloader si comporta bene (non fa altro), dovresti essere in grado di rinominare imv
file ( ).