Ich lade mehrere Dateien downloading
über HTTPie in einen Ordner herunter . Ein Bash-Skript zielt darauf ab, heruntergeladene Dateien zu verarbeiten, und ich habe versucht, die heruntergeladenen Dateien in einen anderen Ordner als zu kopieren
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
Dies kopiert aber auch die Dateien, die noch nicht fertig sind. Ich habe versucht, die Übertragung auf ältere Dateien zu beschränken, indem ich -mmin +5
sie dem Befehl hinzufügte . Was ist der effiziente Befehl, um die Dateien, die gerade geschrieben werden, zu belassen und nur heruntergeladene Dateien zu übertragen?
%.part
then rename to%). Wenn sich der Downloader dann gut benimmt (macht nichts Ungewöhnliches), sollten Sie in der Lage sein, (mv
) Dateien umzubenennen .Antworten:
Nicht sehr effizient, aber Sie könnten Folgendes tun:
Das ist zu prüfen, ob die Datei nicht mit aufgeführt ist
w
Ritusa
ccess - Modus in derl
is
t vono
Stiftf
iles vorm
ov
ing.Die
psmisc
Implementierung vonfuser
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: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()
vsfchmod()
oderutimes()
nicht über einen Dateideskriptor)).quelle
-exec
wirdsh
mit einem Befehl (-c '...'
) ausgeführt und{} +
weist sie an, mehr als ein Ergebnis gleichzeitig in diesen Befehl einzugeben. Was ich nicht verstehe, ist, warum essh
nach dem Befehl einen anderen gibt . Was vermisse ich?$0
. Das heißt, es gibt diesem Inline-Skript einen Namen . Dieser Name kann in Fehlermeldungen wie verwendet wird ,<name>: fuser: command not found
zum Beispiel, sosh
ist in der Regel eine gute Wahl in diesem Fall deutlich zu machen , was die Fehlermeldung berichtet (das ist auch das, was es wäre, wenn wir überhaupt nicht gegeben haben jedes Argument nach dem Inline-Skript).