Pobieram wiele plików do folderu downloading
przez HTTPie . Skrypt bash ma na celu przetwarzanie pobranych plików, a ja próbowałem skopiować pobrane pliki do innego folderu jako
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
ale powoduje to również skopiowanie plików, które nie zostały jeszcze ukończone. Próbowałem ograniczyć transfer do starszych plików, dodając -mmin +5
do polecenia. Jakie jest skuteczne polecenie, aby opuścić pliki są zapisywane i przesyłać tylko pobrane pliki?
%.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 ( ).Odpowiedzi:
Niezbyt wydajny, ale możesz zrobić:
Czyli sprawdzenie, czy plik nie jest wymieniony w
w
obrządkua
trybie OSTĘP wl
ís
to
piórkowychf
iles zanimm
ov
ing.psmisc
Wdrożeniefuser
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: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()
vsfchmod()
, lubutimes()
którego nie można zrobić za pomocą deskryptora pliku)).źródło
-exec
Pracujesh
z jednego polecenia (-c '...'
) i{} +
mówi to, aby umieścić więcej niż jeden wynik do tego polecenia w czasie. Nie rozumiem tylko, dlaczegosh
po poleceniu jest inny . czego mi brakuje?$0
. Oznacza to, że nadaje nazwę temu wbudowanemu skryptowi. Ta nazwa może być używana w komunikatach o błędach, takich jak<name>: fuser: command not found
na przykład, więcsh
ogólnie jest dobrym wyborem w tym przypadku, aby wyjaśnić, co zgłasza ten komunikat o błędzie (tak też by było, gdybyśmy nie podali żadnego argumentu po skrypt wewnętrzny).