Я загружаю несколько файлов в папку downloading
через HTTPie . Сценарий bash предназначен для обработки загруженных файлов, и я попытался скопировать загруженные файлы в другую папку как
find /folder/downloading -type f -exec mv '{}' /folder/downloaded \;
но это также копирует файлы, которые еще не были закончены. Я пытался ограничить передачу старых файлов, добавив -mmin +5
в команду. Какая эффективная команда оставить файлы пишутся и передавать только загруженные файлы?
%.part
затем переименовать в%) Затем, если загрузчик ведет себя хорошо (ничего более странного не делает), вы должны иметь возможность переименовывать (mv
) файлы.Ответы:
Не очень эффективно, но вы могли бы сделать:
То есть проверка , что файл не указан в списке с
w
обрядовымa
режимом ступы вl
яs
тo
пероf
Ильза перед темm
оv
ING.psmisc
Реализация ,fuser
как правило , находятся на Linux операционных систем на основе имеет-w
функцию (для проверки файлов открыть для записи) , но , к сожалению, только работу с-k
убить соответствующие процессы. Тем не менее, кажется, что вы все еще можете использовать его, используя псевдосигнал 0, который ничего не делает:Удалите
-s
(или даже замените его-v
), если вы хотите увидеть, какой процесс (процессы) препятствует перемещению.Обратите внимание, что если вы не запускаете эти команды как суперпользователь, вы получите только информацию о своих процессах. Если процессы, загружающие файлы, работают от имени другого пользователя, они останутся незамеченными.
Также обратите внимание, что если вы не перемещаете файлы в другую файловую систему, перемещение файлов не помешает завершению записи в этот процесс любым процессом, выполняющим запись в файл.
Однако, в зависимости от того, для чего они были предназначены впоследствии, они могут быть сбиты с толку, если после того, как они закончат запись, файла больше не будет (например, если они захотят изменить некоторые атрибуты файла после его загрузки и не через дескриптор файла (как
chmod()
vsfchmod()
, илиutimes()
который не может быть сделан через дескриптор файла)).источник
-exec
запускаетсяsh
с одной командой (-c '...'
), и{} +
он сообщает, что одновременно нужно вводить в эту команду более одного результата. Чего я не понимаю, так это того, почемуsh
после команды есть еще один . Что мне не хватает?$0
. То есть он дает имя этому встроенному скрипту. Это имя может использоваться в сообщениях об ошибках, таких как,<name>: fuser: command not found
например, поэтому,sh
как правило, в этом случае хорошим выбором будет прояснить, что сообщает об этом сообщении об ошибке (это также будет, если мы вообще не приводим никаких аргументов после рядный скрипт).