2010-02-04 52 views
0

我想將X-Serve RAID中的文件夾複製到X-Server上的外部硬盤上。兩個磁盤位於同一臺服務器上,因此複製相當容易。我用的是同上命令:Bash:將一個包含文件和文件夾的文件夾複製到外部硬盤,但前提是隻有足夠的空間才能完成複製

ditto -rsrc /Volumes/WadXServeRaid/Users/ $destinationpath/Users/ 

不過,我只想開始複印如果目標磁盤上有足夠的空間。我知道我可以使用DU命令來評估目標磁盤,但我不知道如何獲取文件夾的文件大小並將其與目標空間進行比較。

任何建議將非常感激!

回答

0
#!/bin/bash 

######Change These Vars###### 
srcFolder="/Volumes/WadXServeRaid/Users" 
dstFolder="/path/to/some/external/folder/Users" 
dstPartition="/dev/hdd1" 
overheadbytes=104857600 
############################# 

dstBytes=$(df -B1 | awk -v dpart="$dstPartition" '$1 ~ dpart {print $4}'); 
read srcBytes _ < <(du -s "$srcFolder" 2>/dev/null); 

if (($dstBytes > $srcBytes + $overheadBytes)); then 
    ditto -rsrc "$srcFolder" "$dstFolder" 
fi 

編輯

  • 加$ overheadBytes每個評論的討論默認 值100MB的
  • 我沒有通過分區/安裝 點作爲'df'的參數在 的目的,因爲它似乎需要 根特權,我不想 強制這樣的腳本運行爲 root。
2
du -s name_of_folder_to_be_copied 

會給你的文件夾和包含的項目(文件和文件夾)的總大小。用 df您可以檢查目標驅動器上的可用空間。比較這兩種尺寸,你就完成了(要小心, du給你的字節大小, df 512字節塊,或1024字節,如果你使用 -k選項)。

編輯:更確切地說,你必須解析 df輸出。只得到目標磁盤上的可用空間(單位爲KB)的一種方法是:

df -k mount_point_of_destination|tail -1|sed "s/ */ /g"|cut -d ' ' -f 4 

你要知道,你可以使用awk實現同樣的結果,例如。我只是用SED和削減,因爲這是我想關了蝙蝠的第一種方式;)

+0

我同意一般的想法。但是,當數字非常接近時,詳細信息會出現問題:如果目標文件系統的每個文件開銷較多,則複製可能需要比原始空間大得多的空間。 – ndim 2010-02-04 11:54:02

+0

是的,的確如此。一種可能的方式來播放它(幾乎)安全,就是獲取源文件夾的總大小,然後將它與目標磁盤上的可用空間進行比較之前增加10%。顯然,理想情況下,必須確定百分比,使其足夠高以確保有足夠的空間(即使其他用戶/程序正在寫入目標磁盤),同時又足夠低不要阻止否則將完成沒有錯誤的副本。如果兩個磁盤上的fs相同,則應該沒有問題... – lightman 2010-02-04 11:58:03

相關問題