fltp備份文件后統計驗證

上一篇(https://www.cnblogs.com/jying/p/16805821.html)記錄了自己在centos使用lftp備份文件的過程 , 本篇記錄自己對備份后的文件與源文件目錄的對比統計 。
三種思路:
1、代碼(如java等)循環遍歷所有備份的源和ftp目標文件夾,統計個數對比 。
2、執行linux命令行統計ftp備份文件夾和本地源文件夾文件總大小寫入統計文件,再利用java代碼讀取統計值后對比 。
3、執行linux命令行統計ftp備份文件夾和本地源文件夾文件總個數寫入統計文件,再利用java代碼讀取統計值后對比 。
【fltp備份文件后統計驗證】其中網上的介紹多是用的第一種方式,而且幾乎全都是復制粘貼的重復垃圾文章,個人嘗試可以執行 , 但文件夾較多和層級較多時會非常耗時(因為ftp的連接原理導致),最終放棄方式一 。
用到的方式為commons.net(org.apache.commons.net)包的ftp功能,網上的垃圾文章直接略過,直接用官方的實例測試:
org.apache.commons.net測試實例其中main函數里的測試方式可以是:
public static void test() throws UnknownHostException {String cmd = "-n ftp服務器ip 賬號 密碼 /";String[] cmds = cmd.split(" ");main(cmds);}不記得有沒有參考這倆文章了:https://www.cnblogs.com/chen1281024/p/15625278.html 、https://www.cnblogs.com/leonlipfsj/p/15972372.html
然后考慮方式2,關于linux統計目錄下文件大小的命令是du,
du常用的選項:-h:--human-readable 以人類可讀的方式顯示,即自動轉為K,M,G等單位 。-a:-all 顯示目錄占用的磁盤空間大??,含子目录和文件占用磁盘空紲Z拇笮∠晗噶斜?-s:--summarize 顯示目錄占用的磁盤空間大?。?不含子目錄和文件占用的磁盤空間大小詳細列表-b:-bytes 顯示目錄或文件大小時,以byte為單位 。-k:--kilobytes 以KB(1024bytes)為單位輸出 。-m:--megabytes 以MB為單位輸出 。-c:--total 顯示目錄或文件占用的磁盤空間大?。?統計它們的總和 。--apparent-size:顯示目錄或文件自身的大小-l :統計硬鏈接占用磁盤空間的大小-L:統計符號鏈接所指向的文件占用的磁盤空間大小du -sh : 查看當前目錄總共占的容量 。而不單獨列出各子項占用的容量 。du -sh * | sort -n 統計當前文件夾(目錄)大小,并按文件大小排序du -lh --max-depth=1 : 查看當前目錄下一級子文件和子目錄占用的磁盤容量 。關于以上常用選項的實例可以參考:https://blog.csdn.net/pichcar1982/article/details/121531546
因為lftp也支持du,所以貌似可以直接通過du統計服務器本地源文件目錄大小和ftp服務器文件目錄大小對比就可以了 , 但實際執行過程發現本地文件要比同步到ftp服務器上的文件大,于是使用ls -l查看發現單個文件大小也不一致,個人猜測是服務器本地文件上傳保存的字節流和ftp備份的字節流長度不一致導致的 。還有一種解釋(https://blog.csdn.net/mtawaken/article/details/8491413 或https://blog.csdn.net/weixin_42803243/article/details/123724755)說是服務器本身的存儲塊大小不一致導致的,所以du加參數--apparent-size即可,而我加上此參數發現還是不一致,即使單個文件顯示一致了,整個目錄的大小仍然有差異 。
方式3,對比文件個數, linux命令ls -l 可以按行列出目錄下所有文件 , 可以直接根據行數統計出文件個數 。
# 查看當前目錄下的文件數量(不包含子目錄中的文件)ls -l|grep "^-"| wc -l# 查看當前目錄下的文件數量(包含子目錄中的文件) 注意:R,代表遍歷子目錄ls -lR|grep "^-"| wc -l# 查看當前目錄下的文件夾目錄個數(不包含子目錄中的目錄),同上,如果需要查看子目錄的,加上Rls -l|grep "^d"| wc -lwc -l 表示統計輸出信息的行數,因為經過前面的過濾已經只剩下普通文件,一個目錄或文件對應一行 , 所以統計的信息的行數也就是目錄或文件的個數 。參考:https://www.cnblogs.com/wangyuxing/p/15818042.html
在lftp中也可以使用該方式來統計文件個數,但有一些限制,比如lftp中的ls命令默認就是顯示按行的文件詳情 , 等同于普通命令ls -l,而且lftp中使用R參數無效 , 這意味著無法循環遍歷子文件夾目錄(了解過ftp的連接過程則知道在ftp里切換目錄需要重新連接),所以在lftp中的統計文件個數命令寫為:
ls 文件夾目錄 | grep "^-" | wc -l這也就意味著只能統計單層的文件夾里的文件個數 。但這也是能準確統計是否備份成功的最準確方式了 。
所以我們需要對文件存儲路徑進行優化,優化后的存儲路徑應該滿足最終的統計路徑只有一層:

推薦閱讀