Это зависит. Современные ядра Unix -, как и операционные системы, обычно имеют довольно сложный код для ускорения ввода-вывода. Самая известная функция — это кэширование :, если сектор был прочитан в прошлом, в памяти все еще может быть копия, и в этом случае запрос на жесткий диск вообще не отправляется. Другие типичные функции ускорения включают в себя -из -доступ к порядку (, когда есть много ожидающих запросов, ядро может выдавать их в другом порядке, чтобы минимизировать поиск или лучше использовать параллелизм, разрешенный аппаратным обеспечением ), и при предварительной выборке (ядро предполагает, что если секторы с 0 по 5 файла были прочитаны, то, вероятно, будет прочитан сектор 6, так что оно прочитает сектор 6 в кэш, если ему больше нечего делать ).
Возможность выдачи запроса на чтение сектора 1 до завершения запроса на чтение сектора 0 зависит от возможностей дисковой шины и диска. Общего ответа нет.
Использование inotifywait
может достичь того, что вам нужно -у него есть возможность дождаться окончания записи файла перед выполнением команды.
Следующее будет постоянно следить за папкой на наличие новых файлов и выполнять команду в цикле, когда запись в файл будет завершена.
WATCH_DIR=/directory/to/monitor
DEST_DIR=/x/y/z
/usr/bin/inotifywait --recursive --monitor --quiet -e moved_to -e close_write --format '%w%f' "$WATCH_DIR" | while read -r INPUT_FILE; do
mv "$0" "$DEST_DIR"
done
Дополнительные параметры конфигурации см. в https://linux.die.net/man/1/inotifywatch
.