個(gè)人經(jīng)歷:系統(tǒng)centos 6.3
方法一:
find 目錄 -name "*.abc" | xargs rm
命令很危險(xiǎn), 你先執(zhí)行前半段試試看 是不是你要?jiǎng)h除的文件, 在整條執(zhí)行
方法二:
find . -name '*.exe' -type f -print -exec rm -rf {} \;
(1) "." 表示從當(dāng)前目錄開始遞歸查找
(2) “ -name '*.exe' "根據(jù)名稱來(lái)查找,要查找所有以.exe結(jié)尾的文件夾或者文件
(3) " -type f "查找的類型為文件
(4) "-print" 輸出查找的文件目錄名
(5) 最主要的是是-exec了,-exec選項(xiàng)后邊跟著一個(gè)所要執(zhí)行的命令,表示將find出來(lái)的文件或目錄執(zhí)行該命令。
exec選項(xiàng)后面跟隨著所要執(zhí)行的命令或腳本,然后是一對(duì)兒{},一個(gè)空格和一個(gè)\,最后是一個(gè)分號(hào)
-----------------------------------------------------------
今天在跑腳本的時(shí)候看到如下報(bào)錯(cuò):
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
然后就上網(wǎng)查了一下,結(jié)果搜索到一篇,大概是這樣說(shuō)的:多文件的查找的時(shí)候需要增加單引號(hào)
而我之前一直都是用的雙引號(hào),也沒有遇到問題,這次卻報(bào)錯(cuò)了~
ssh $ip "cd $path;find . -name'access.$month*.log' -print -exec zip -r access.$month.zip {} \;"
修改成單引號(hào)后,木有再見報(bào)錯(cuò)~
例子說(shuō)明:
- # 進(jìn)入tmp目錄新建4個(gè)文本文件
- # cd /tmp
- # touch {1,2,3,4}.txt
- # find . -name *.txt
- find: paths must precede expression: 2.txt
出現(xiàn)這個(gè)提示是因?yàn)樾翘?hào)被展開為當(dāng)前目錄下所有的文件,這樣的匹配當(dāng)然會(huì)出錯(cuò)。看這個(gè)就知道了:
- # echo *
- 1.txt 2.txt 3.txt 4.txt
- # echo '*'
- *
- # echo \*
- *
想要星號(hào)不被展開就需要加上括號(hào)或者反斜杠轉(zhuǎn)義,知道了這些我們就知道該怎么find了
- # find . -name '*.txt'
- find . -name '*.txt'
- ./4.txt
- ./2.txt
- ./3.txt
- ./1.txt
- #或者使用反斜杠
- find . -name \*.txt
- ./4.txt
- ./2.txt
- ./3.txt
- ./1.txt