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