Pas très efficace, mais vous pourriez faire:
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
C'est de vérifier que le fichier ne figure pas avec un w
rite a
mode ccès dans le l
i s
t o
pen f
iles avant m
o v
ing.
L' psmisc
implémentation de fuser
comme on le trouve généralement sur les systèmes d'exploitation Linux a une -w
fonction (pour vérifier les fichiers ouverts en écriture) mais malheureusement elle ne fonctionne qu'avec -k
pour tuer les processus correspondants. Cependant, il semble que vous puissiez toujours l'utiliser en utilisant le pseudo-signal 0 qui ne fait rien:
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
Supprimez le -s
(ou même remplacez-le par -v
) si vous voulez voir quel (s) processus empêchent le déplacement.
Notez que si vous n'exécutez pas ces commandes en tant que super-utilisateur, vous n'obtiendrez que des informations sur vos processus. Si les processus de téléchargement des fichiers s'exécutent sous un autre utilisateur, ils ne seront pas détectés.
Notez également que si vous ne déplacez pas les fichiers vers un autre système de fichiers, le déplacement des fichiers n'empêchera pas le processus en cours d'écriture dans le fichier de terminer l'écriture.
Cependant, en fonction de ce pour quoi ils ont été conçus par la suite, ils peuvent être confus si, une fois l'écriture terminée, le fichier n'est plus là (par exemple, s'ils souhaitent modifier certains attributs du fichier après l'avoir téléchargé et ne le font pas via le descripteur de fichier (comme chmod()
vs fchmod()
, ou utimes()
qui ne peut pas être fait via un descripteur de fichier)).
%.part
puis renommer en%). Ensuite, si le téléchargeur se comporte bien (ne fait rien d'autre de bizarre), vous devriez pouvoir renommer lesmv
fichiers ( ).