Niezbyt wydajny, ale możesz zrobić:
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
Czyli sprawdzenie, czy plik nie jest wymieniony w w
obrządku a
trybie OSTĘP w l
í s
t o
piórkowych f
iles zanim m
o v
ing.
psmisc
Wdrożenie fuser
jak zwykle znajduje się na systemach operacyjnych Linux opartych posiada -w
funkcję (w celu sprawdzenia otwartych plików na piśmie), ale niestety tylko z pracy -k
, aby zabić odpowiednich procesów. Wydaje się jednak, że nadal możesz go używać, używając pseudo-sygnału 0, który nic nie robi:
find /folder/downloading -type f -exec sh -c '
for file do
fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded
done' sh {} +
Usuń -s
(lub nawet zamień na -v
), jeśli chcesz zobaczyć, jakie procesy uniemożliwiają przeniesienie.
Pamiętaj, że jeśli nie uruchamiasz tych komend jako superużytkownik, otrzymasz jedynie informacje o swoich procesach. Jeśli procesy pobierające pliki działają jako inny użytkownik, pozostaną niewykryte.
Pamiętaj również, że jeśli nie przenosisz plików do innego systemu plików, przeniesienie plików nie uniemożliwi ukończeniu przez proces zapisujący pliku tego pliku.
Jednakże, w zależności od tego, co już zostało zaprojektowane, aby zrobić potem, że może się mylić, jeśli po zakończeniu ich pisanie, plik nie jest już tam (na przykład, jeśli chcą zmienić niektóre atrybuty pliku po pobraniu go i tak nie nie poprzez deskryptor pliku (jak chmod()
vs fchmod()
, lub utimes()
którego nie można zrobić za pomocą deskryptora pliku)).
%.part
a następnie zmień nazwę na%). Jeśli więc program pobierający zachowuje się dobrze (nie robi nic dziwnego), powinieneś mieć możliwość zmiany nazwmv
plików ( ).