Nicht sehr effizient, aber Sie könnten Folgendes tun:
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
Das ist zu prüfen, ob die Datei nicht mit aufgeführt ist w
Ritus a
ccess - Modus in der l
i s
t von o
Stift f
iles vor m
o v
ing.
Die psmisc
Implementierung von fuser
wie bei Linux-basierten Betriebssystemen üblich hat eine -w
Funktion (nach zum Schreiben geöffneten Dateien suchen), funktioniert aber leider nur -k
, um die entsprechenden Prozesse abzubrechen. Es scheint jedoch, dass Sie es weiterhin verwenden können, indem Sie das Pseudosignal 0 verwenden, das nichts bewirkt:
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
Entfernen Sie das Element -s
(oder ersetzen Sie es durch -v
), wenn Sie sehen möchten, welche Prozesse das Verschieben verhindern.
Beachten Sie, dass Sie nur Informationen zu Ihren Prozessen erhalten, wenn Sie diese Befehle nicht als Superuser ausführen. Wenn die Prozesse zum Herunterladen der Dateien als ein anderer Benutzer ausgeführt werden, bleiben sie unentdeckt.
Beachten Sie auch, dass das Verschieben der Dateien nicht den Abschluss des Schreibvorgangs in die Datei verhindert, es sei denn, Sie verschieben die Dateien in ein anderes Dateisystem.
Abhängig davon, wofür sie später entwickelt wurden, können sie jedoch verwirrt sein, wenn die Datei nach dem Schreiben nicht mehr vorhanden ist (z. B. wenn sie nach dem Herunterladen einige Attribute der Datei ändern möchten und dies nicht über den Dateideskriptor (wie chmod()
vs fchmod()
oder utimes()
nicht über einen Dateideskriptor)).
%.part
then rename to%). Wenn sich der Downloader dann gut benimmt (macht nichts Ungewöhnliches), sollten Sie in der Lage sein, (mv
) Dateien umzubenennen .