国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

淺談Linux下通過find命令進(jìn)行rm文件刪除的小技巧

2024-09-05 23:03:07
字體:
供稿:網(wǎng)友

我們經(jīng)常會通過find命令進(jìn)行批量操作,如:批量刪除舊文件、批量修改、基于時(shí)間的文件統(tǒng)計(jì)、基于文件大小的文件統(tǒng)計(jì)等,在這些操作當(dāng)中,由于rm刪除操作會導(dǎo)致目錄結(jié)構(gòu)變化,如果要通過find結(jié)合rm的操作寫成腳本,就會遇到一些麻煩,本文通過一個(gè)例子為大家進(jìn)行介紹。

系統(tǒng)環(huán)境:

SUSE Linux Enterprise Server 11 或

Red Hat Enterprise Linux

問題癥狀:

客戶現(xiàn)場有一個(gè)自動化的腳本,有以下的find語句,每天運(yùn)行以刪除某個(gè)目錄下7天以前的文件或目錄,這些目錄都是按時(shí)間順序生成PostgreSQL數(shù)據(jù)庫的WAL日志及其錯(cuò)誤日志pg_log:

/bin/find /enterprisedb_backup/postgresql/ -mtime +7 -exec /bin/rm -rf '{}' /;

運(yùn)行過程中,間歇性地出現(xiàn)以下錯(cuò)誤:

[root@edb ~]# /bin/find /enterprisedb_backup/postgresql/ -mtime +7 -exec /bin/rm -rf {} /;/bin/find: `/enterprisedb_backup/postgresql/network-scripts': No such file or directory[root@edb ~]# echo $?1

顯然,以上命令返回了錯(cuò)誤的結(jié)果,但客戶反映說,以上腳本運(yùn)行后目錄下7天前的數(shù)據(jù)的確備刪除了。

問題分析:

進(jìn)行故障重現(xiàn),在另一臺服務(wù)器中通過模擬數(shù)據(jù)單獨(dú)運(yùn)行find命令分析此問題,測試過程如下:

1.模擬數(shù)據(jù)

[root@edbnode1 ~]# dateWed Jun 18 23:08:18 CST 2014[root@edbnode1 ~]# cp -rcp /etc/sysconfig/network-scripts/ /enterprisedb_backup/postgresql/[root@edbnode1 ~]# cp -rcp /etc/init.d/iptables /enterprisedb_backup/postgresql/## 以上通過 cp -rcp 命令使得拷貝到目標(biāo)目錄的數(shù)據(jù)保持包括:建立時(shí)間、用戶權(quán)根等信息,以模擬出一個(gè)舊文件及一個(gè)舊目錄[root@edbnode1 ~]# ll /enterprisedb_backup/postgresql/total 16-rwxr-xr-x. 1 root root 9409 Oct 31 2012 iptablesdrwxr-xr-x. 2 root root 4096 Jun 18 2013 network-scripts## 以上可以看到iptables文件是2012年建立的,network-scripts是2013年建立的,都遠(yuǎn)遠(yuǎn)超過了7天[root@edbnode1 ~]# ll /enterprisedb_backup/postgresql/*-rwxr-xr-x. 1 root root 9409 Oct 31 2012 /enterprisedb_backup/postgresql/iptables/enterprisedb_backup/postgresql/network-scripts:total 212-rw-r--r--. 1 root root  159 Jun 18 2013 ifcfg-eth0-rw-r--r--. 1 root root  203 Jun 18 2013 ifcfg-eth1-rw-r--r--. 1 root root  203 Jun 18 2013 ifcfg-eth2-rw-r--r--. 1 root root  254 Jan 9 2013 ifcfg-lolrwxrwxrwx. 1 root root  20 Jun 18 2013 ifdown -> ../../../sbin/ifdown-rwxr-xr-x. 1 root root  627 Jan 9 2013 ifdown-bnep-rwxr-xr-x. 1 root root 5397 Jan 9 2013 ifdown-eth-rwxr-xr-x. 1 root root  781 Jan 9 2013 ifdown-ippp-rwxr-xr-x. 1 root root 4168 Jan 9 2013 ifdown-ipv6lrwxrwxrwx. 1 root root  11 Jun 18 2013 ifdown-isdn -> ifdown-ippp-rwxr-xr-x. 1 root root 1481 Jan 9 2013 ifdown-post-rwxr-xr-x. 1 root root 1064 Jan 9 2013 ifdown-ppp-rwxr-xr-x. 1 root root  835 Jan 9 2013 ifdown-routes-rwxr-xr-x. 1 root root 1370 Jan 9 2013 ifdown-sit-rwxr-xr-x. 1 root root 1434 Jan 9 2013 ifdown-tunnellrwxrwxrwx. 1 root root  18 Jun 18 2013 ifup -> ../../../sbin/ifup-rwxr-xr-x. 1 root root 12365 Jan 9 2013 ifup-aliases-rwxr-xr-x. 1 root root  859 Jan 9 2013 ifup-bnep-rwxr-xr-x. 1 root root 10157 Jan 9 2013 ifup-eth-rwxr-xr-x. 1 root root 11971 Jan 9 2013 ifup-ippp-rwxr-xr-x. 1 root root 10401 Jan 9 2013 ifup-ipv6lrwxrwxrwx. 1 root root   9 Jun 18 2013 ifup-isdn -> ifup-ippp-rwxr-xr-x. 1 root root  727 Jan 9 2013 ifup-plip-rwxr-xr-x. 1 root root  954 Jan 9 2013 ifup-plusb-rwxr-xr-x. 1 root root 2364 Jan 9 2013 ifup-post-rwxr-xr-x. 1 root root 4154 Jan 9 2013 ifup-ppp-rwxr-xr-x. 1 root root 1925 Jan 9 2013 ifup-routes-rwxr-xr-x. 1 root root 3499 Jan 9 2013 ifup-sit-rwxr-xr-x. 1 root root 2488 Jan 9 2013 ifup-tunnel-rwxr-xr-x. 1 root root 3770 Jan 9 2013 ifup-wireless-rwxr-xr-x. 1 root root 4623 Jan 9 2013 init.ipv6-global-rwxr-xr-x. 1 root root 1125 Jan 9 2013 net.hotplug-rw-r--r--. 1 root root 13079 Jan 9 2013 network-functions-rw-r--r--. 1 root root 29853 Jan 9 2013 network-functions-ipv6## 以上可以看到network-script不是一個(gè)空的目錄,當(dāng)中還有文件,而且文件也都已經(jīng)是7天前建立的了 

2.測試單獨(dú)模擬執(zhí)行腳本中的find + rm指令

[root@edbnode1 ~]# /bin/find /enterprisedb_backup/postgresql/ -mtime +7 -exec /bin/rm -rf {} /;/bin/find: `/enterprisedb_backup/postgresql/network-scripts': No such file or directory[root@edbnode1 ~]# echo $?1[root@edbnode1 ~]# ls /enterprisedb_backup/postgresql/[root@edbnode1 ~]#

可以看到find操作的確返回了錯(cuò)誤的結(jié)果,但查看數(shù)據(jù)備份目錄發(fā)現(xiàn),iptables文件及network-scripts目錄已經(jīng)正確刪除

3.由于數(shù)據(jù)已經(jīng)正確刪除,因此我們開始懷疑是由network-scripts目錄刪除后,find繼續(xù)嘗試刪除此目錄下其它文件,導(dǎo)致出不“No such file or directory”的錯(cuò)誤,因此需要于進(jìn)一步證實(shí)此猜想,重新執(zhí)行以上“第1步”中的數(shù)據(jù)環(huán)境模擬,并執(zhí)行以下操作,主要是將rm轉(zhuǎn)換成ls以展現(xiàn)整體運(yùn)行過程:

[root@edbnode1 ~]# cp -rcp /etc/sysconfig/network-scripts/ /enterprisedb_backup/postgresql/[root@edbnode1 ~]# cp -rcp /etc/init.d/iptables /enterprisedb_backup/postgresql/[root@edbnode1 ~]# /bin/find /enterprisedb_backup/postgresql/ -mtime +7 -exec /bin/ls {} /;ifcfg-eth0 ifcfg-lo	 ifdown-eth  ifdown-isdn ifdown-routes ifup		ifup-eth  ifup-isdn  ifup-post  ifup-sit	  init.ipv6-global  network-functions-ipv6ifcfg-eth1 ifdown	 ifdown-ippp ifdown-post ifdown-sit	 ifup-aliases	ifup-ippp ifup-plip  ifup-ppp   ifup-tunnel  net.hotplugifcfg-eth2 ifdown-bnep ifdown-ipv6 ifdown-ppp  ifdown-tunnel ifup-bnep	ifup-ipv6 ifup-plusb ifup-routes ifup-wireless network-functions/enterprisedb_backup/postgresql/network-scripts/ifup-plusb/enterprisedb_backup/postgresql/network-scripts/ifup-sit/enterprisedb_backup/postgresql/network-scripts/ifdown-post/enterprisedb_backup/postgresql/network-scripts/ifcfg-lo/enterprisedb_backup/postgresql/network-scripts/network-functions/enterprisedb_backup/postgresql/network-scripts/ifup-bnep/enterprisedb_backup/postgresql/network-scripts/ifup-ippp/enterprisedb_backup/postgresql/network-scripts/ifdown-sit/enterprisedb_backup/postgresql/network-scripts/ifdown-tunnel/enterprisedb_backup/postgresql/network-scripts/ifup-plip/enterprisedb_backup/postgresql/network-scripts/ifup-eth/enterprisedb_backup/postgresql/network-scripts/ifdown-ipv6/enterprisedb_backup/postgresql/network-scripts/ifdown-ippp/enterprisedb_backup/postgresql/network-scripts/ifup-aliases/enterprisedb_backup/postgresql/network-scripts/network-functions-ipv6/enterprisedb_backup/postgresql/network-scripts/ifup-ipv6/enterprisedb_backup/postgresql/network-scripts/ifup-post/enterprisedb_backup/postgresql/network-scripts/ifcfg-eth2/enterprisedb_backup/postgresql/network-scripts/ifcfg-eth1/enterprisedb_backup/postgresql/network-scripts/ifdown-ppp/enterprisedb_backup/postgresql/network-scripts/ifup-isdn/enterprisedb_backup/postgresql/network-scripts/ifcfg-eth0/enterprisedb_backup/postgresql/network-scripts/ifdown/enterprisedb_backup/postgresql/network-scripts/ifup-wireless/enterprisedb_backup/postgresql/network-scripts/ifup-ppp/enterprisedb_backup/postgresql/network-scripts/ifdown-eth/enterprisedb_backup/postgresql/network-scripts/init.ipv6-global/enterprisedb_backup/postgresql/network-scripts/ifdown-isdn/enterprisedb_backup/postgresql/network-scripts/ifup-tunnel/enterprisedb_backup/postgresql/network-scripts/ifdown-routes/enterprisedb_backup/postgresql/network-scripts/ifdown-bnep/enterprisedb_backup/postgresql/network-scripts/net.hotplug/enterprisedb_backup/postgresql/network-scripts/ifup/enterprisedb_backup/postgresql/network-scripts/ifup-routes/enterprisedb_backup/postgresql/iptables

通過以上操作我們可以看到,find命令不單查詢了/enterprisedb_backup/postgresql/目錄,并且遍歷了所有子目錄,因此支持了我們的推斷

4.綜上所述基本定位問題所在

解決方案:

1.整理思路后,可以確認(rèn),如果find只找出所需操作目錄的第1層文件及目錄即可解決此問題

2.通過偉大的 man 命令我們得到以下信息

-maxdepth levels  Descend at most levels (a non-negative integer) levels of directories below the command line arguments. -maxdepth 0 means only apply the tests and actions to the command line arguments. 

3.測試操作確認(rèn)修改為:

[root@edbnode1 ~]# /bin/find /enterprisedb_backup/postgresql/ -mtime +7 -maxdepth 1 -exec /bin/rm -rf {} /;/bin/find: warning: you have specified the -maxdepth option after a non-option argument -mtime, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.

這里意思是說:-mtime找到的信息可能會操過-maxdepth的范圍,在find操作中建議-maxdepth放在所有其他參數(shù)的前面

解決結(jié)果【完成】

以上這篇淺談Linux下通過find命令進(jìn)行rm文件刪除的小技巧就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 淳安县| 九寨沟县| 岗巴县| 孝感市| 巴彦淖尔市| 北流市| 当阳市| 固安县| 崇阳县| 崇州市| 阿勒泰市| 遂昌县| 泰安市| 禄丰县| 广安市| 扶沟县| 河北省| 邢台县| 盖州市| 遵义市| 锡林浩特市| 称多县| 闽侯县| 大方县| 湄潭县| 鹤山市| 民乐县| 白河县| 托克逊县| 若羌县| 平昌县| 德保县| 五大连池市| 门头沟区| 通化市| 长沙县| 吴旗县| 海安县| 淮南市| 苏尼特左旗| 阿坝县|