Je télécharge plusieurs fichiers dans un dossier downloading
via HTTPie . Un script bash vise à traiter les fichiers téléchargés, et j'ai essayé de copier les fichiers téléchargés dans un autre dossier en tant que
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
mais cela copie également les fichiers, qui ne sont pas encore terminés. J'ai essayé de limiter le transfert vers des fichiers plus anciens en ajoutant -mmin +5
à la commande. Quelle est la commande efficace pour laisser les fichiers en cours d'écriture et transférer uniquement les fichiers téléchargés?
%.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 ( ).Réponses:
Pas très efficace, mais vous pourriez faire:
C'est de vérifier que le fichier ne figure pas avec un
w
ritea
mode ccès dans lel
is
to
penf
iles avantm
ov
ing.L'
psmisc
implémentation defuser
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: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()
vsfchmod()
, ouutimes()
qui ne peut pas être fait via un descripteur de fichier)).la source
-exec
est en courssh
d' exécution avec une commande (-c '...'
) et le lui{} +
indique de mettre plus d'un résultat dans cette commande à la fois. Ce que je ne comprends pas, c'est pourquoi il y en a un autresh
après la commande. Qu'est-ce que je rate?$0
. Autrement dit, il donne un nom à ce script en ligne. Ce nom peut être utilisé dans des messages d'erreur comme<name>: fuser: command not found
par exemple, c'est doncsh
généralement un bon choix dans ce cas pour clarifier ce qui signale ce message d'erreur (c'est aussi ce que ce serait si nous ne donnions aucun argument après le script en ligne).