題 如何知道某個文件是否已從其他位置上傳完畢?


假設我們有 機器1 和 機器2
機器2,這是基於Linux的,正在接收一個文件(讓我們說 cat.jpg 通過SCP發送 機器1 (真正重要的是哪個操作系統..)。

我怎麼知道 機器2,該文件已完成上傳 機器1 ?
請注意,通過“知道”我的意思是通過運行命令(通過每分鐘運行一次的cron),而不是通過事件驅動的方式(“使scp在完成上載時發出命令”)。

我的另一個限制是我無法改變任何東西 機器1 或者以SCP的方式存檔。

如果真的很重要:

  • 正在傳輸的文件是視頻文件,MP4擴展名。
  • 機器2 是ubuntu 10.10

4
2018-06-05 07:41


起源


檢查接收過程是否仍然存在。 - mpez0


答案:


你應該可以使用 lsof的 用於檢查文件是否在另一個程序中打開的命令。

lsof | grep filename

如果你得到一個結果,文件在另一個進程中打開,可能仍在上傳。如果結果為空,則文件已完成上載,或者由於某種原因可能導致傳輸失敗。


4
2018-06-05 09:53





可能有一種更聰明的方式,但在這些情況下我只是使用 ls 顯示文件大小,然後等待它停止更改一段合理的時間(10-20秒)-eg:

watch ls -l *.mp4

1
2018-06-05 08:19





fuser -mv / 2>&1 | grep F

這將在給定的掛載點中列出所有用戶,pid和文件以開放和書面形式列出。


1
2018-06-10 18:05





以root身份:

fuser filename

如果打印出某些內容,則某個進程當前會使用該文件。


1
2017-07-06 18:18