Чтобы переместить новый файл в папку после завершения переноса

Это зависит. Современные ядра Unix -, как и операционные системы, обычно имеют довольно сложный код для ускорения ввода-вывода. Самая известная функция — это кэширование :, если сектор был прочитан в прошлом, в памяти все еще может быть копия, и в этом случае запрос на жесткий диск вообще не отправляется. Другие типичные функции ускорения включают в себя -из -доступ к порядку (, когда есть много ожидающих запросов, ядро ​​​​может выдавать их в другом порядке, чтобы минимизировать поиск или лучше использовать параллелизм, разрешенный аппаратным обеспечением ), и при предварительной выборке (ядро ​​предполагает, что если секторы с 0 по 5 файла были прочитаны, то, вероятно, будет прочитан сектор 6, так что оно прочитает сектор 6 в кэш, если ему больше нечего делать ).

Возможность выдачи запроса на чтение сектора 1 до завершения запроса на чтение сектора 0 зависит от возможностей дисковой шины и диска. Общего ответа нет.

2
10.11.2019, 12:41
1 ответ

Использование 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

.
2
27.01.2020, 22:07

Теги

Похожие вопросы