我使用 Windows 7 有一個設定了共享資料夾的伺服器。如果我打開其中一個並獲取一個文件並將其移動到子資料夾中,那麼它是即時的 - 該文件顯然只是在伺服器上移動。對於開啟相同共用資料夾的兩個視窗也是如此。
另一方面,如果我在同一伺服器上打開另一個共享資料夾並在它們之間移動文件,則需要很長時間- 就像將文件從第一個共享下載到我的電腦的臨時資料夾中,然後將其上傳到另一個共享一樣。
有沒有什麼方法可以像這樣在不同的共享之間移動文件,而不需要我的電腦在中間下載它們?我想要一些速度,因為它通常是相當大的檔案。
答案1
當您說“另一個共用資料夾”時,您的意思是“不同檔案共用中的資料夾(即不同的映射磁碟機)”嗎?如果是這樣,那就是問題所在,而且沒有簡單、神奇的解決方案。當你移動將一個檔案從一個資料夾轉移到另一個資料夾在同一體積上,作業系統所需要做的就是在目標資料夾中寫入新的目錄條目並刪除來源資料夾中的舊目錄條目 - 不需要存取檔案資料。當你複製對於一個文件,作業系統必須讀取每個資料塊並將其寫入新位置。磁碟區之間的移動也可能是物理上獨立的磁碟之間的移動 - 它必須被視為副本,然後刪除來源檔案 - 因為目錄條目不能指向不同磁碟區上的資料區塊。
PS 諷刺的是,物理上獨立的磁碟之間的移動甚至可能是快點與同一磁碟上的分割區(磁碟區或「共用」)之間的移動相比,因為在後一種情況下,磁碟 I/O 磁頭需要在來源柱面和目標柱面之間來回跳躍。
答案2
儘管我遲到了,但是,這是食譜,我相信這是一個實用方法,有一定的前提條件。
核心理念告訴伺服器將特定位置(當然是在一個 Samba 共享中)的物件移動到其他位置(當然在其他森巴分享)。
inotifywait
是廚師,炊具稱為while
、read
、 和mv
。這就是我們晚餐的團隊。廚房(或餐廳)看起來像這樣:
Samba shares ├─share.1 │ ├─recv │ ├─to.share.2 │ ├─to.share.3 │ └─[...] ├─share.2 │ ├─recv │ ├─to.share.1 │ ├─to.share.3 │ └─[...] ├─share.3 │ ├─recv │ ├─to.share.1 │ ├─to.share.2 │ └─[...] └─[...]
假設使用者登入 share.x。如果使用者想要將 share.x 中的某些內容移動/複製到 share.y,請執行以下操作:
選擇 share.x 中的對象,將它們移動/複製到
share.x/to.share.y
.伺服器正在使用 監視這些
to.share.*
資料夾inotifywait
,因此它知道該開始工作了。伺服器將裡面的物件移動
share.x/to.share.y
到share.y/recv
。完畢!
前提條件包括如上所述的特定資料夾結構、在伺服器上執行以執行實際mv
操作的作業/服務/腳本。
我確實有自己的腳本程式碼可以與您分享,但還有很多改進要做:
inotifywait -m "$source_dir" --format '%w%f' -e moved_to,create,modify | while read file; do mv -v "$file" "$dest_dir"; done
修改這些$source_dir
並$dest_dir
以滿足您自己的需求。
我用來supervisor
管理一堆如上所述的腳本來製作我的“Samba teleportation”。如果您不熟悉supervisor
,請參考http://supervisord.org/以及其他有關它的答案。
答案3
最簡單/快速和骯髒的方法是從伺服器本身執行此操作,或建立將兩個目標共用作為子資料夾的共用(例如\\servername\c$
)。