4

Допустим, у нас есть машина 1 и машина 2.
Машина 2, работающая на основе Linux, получает файл (скажем, cat.jpg, отправленный через SCP с машины 1 (не имеет значения, какая операционная система ...).

Как я могу узнать на машине 2, что файл завершил загрузку с машины 1 ?
Обратите внимание, что под "знанием" я подразумеваю запуск команды (через cron, который запускается каждую минуту), а не управляемый событиями способ ("заставьте scp выдать команду после завершения загрузки").

Другое ограничение, которое у меня есть, заключается в том, что я ничего не могу изменить на компьютере 1 или в способе, которым он SCP-файлы.

Если это действительно имеет значение:

  • переданные файлы - видеофайл с расширением MP4.
  • машина 2 убунту 10.10

4 ответа4

4

Вы должны быть в состоянии использовать команду lsof, чтобы проверить, открыт ли файл в другой программе.

lsof | grep filename

если вы получили результат, файл открыт в другом процессе и, вероятно, все еще загружается. Если результат не указан, загрузка файла завершена или, возможно, по какой-то причине передача не удалась.

1

как корень:

fuser filename

Если что-то распечатано, то файл в данный момент используется каким-то процессом.

1
fuser -mv / 2>&1 | grep F

Это перечислит всех пользователей, pid и файлы, открытые и записанные в заданной точке монтирования.

1

Может быть более разумный способ сделать это, но в этих ситуациях я просто использую ls чтобы показать размер файла, а затем жду, пока он перестанет меняться в течение разумного периода времени (10-20 секунд) -eg:

watch ls -l *.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .