Linux下通過find命令進行rm文件刪除的小技巧
我們常常會通過find命令進行批量操作。如:批量刪除舊文件、批量改動、基於時間的文件統計、基於文件大小的文件統計等。在這些操作其中,因為rm刪除操作會導致文件夾結構變化,假設要通過find結合rm的操作寫成腳本。就會遇到一些麻煩,本文通過一個樣例為大家進行介紹。
系統環境:
SUSE Linux Enterprise Server 11 或
Red Hat Enterprise Linux
問題癥狀:
客戶現場有一個自己主動化的腳本,有下面的find語句,每天執行以刪除某個文件夾下7天曾經的文件或文件夾,這些文件夾都是按時間順序生成PostgreSQL數據庫的WAL日誌及其錯誤日誌pg_log:
/bin/find /enterprisedb_backup/postgresql/ -mtime +7 -exec /bin/rm -rf ‘{}‘ \;
執行過程中。間歇性地出現下面錯誤:[[email protected] ~]# /bin/find /enterprisedb_backup/postgresql/ -mtime +7 -exec /bin/rm -rf {} \; /bin/find: `/enterprisedb_backup/postgresql/network-scripts‘: No such file or directory [[email protected]
顯然,以上命令返回了錯誤的結果,但客戶反映說,以上腳本執行後文件夾下7天前的數據的確備刪除了。
問題分析:
進行故障重現。在還有一臺server中通過模擬數據單獨執行find命令分析此問題。測試步驟例如以下:
- 模擬數據
[[email protected] ~]# date Wed Jun 18 23:08:18 CST 2014 [[email protected] ~]# cp -rcp /etc/sysconfig/network-scripts/ /enterprisedb_backup/postgresql/ [[email protected]