[20210408]使用linux find注意.txt

lfree 發表於 2021-04-08

[20210408]使用linux find注意.txt

--//昨天本想清理生產系統trc檔案,使用find命令遇到一些問題,引起一些注意通過例子說明。
--//注:測試前我關閉測試資料庫,主要想避免一些測試中資料庫再產生trc檔案。

$ cd /u01/app/oracle/diag/rdbms/book/book/trace

$ find . -name "*.tr?" -print -mtime +1   |wc
   2324    2324   94020
$ find . -name "*.tr?" -print -mtime 1   |wc
   2324    2324   94020
$ find . -name "*.tr?" -print -mtime -1   |wc
   2324    2324   94020

--//不可能-mtime 的三個引數+1 ,1 ,-1 的情況,3個結果一樣。
--//刪除-print引數。

$ find . -name "*.tr?"  -mtime -1   |wc
     56      56    1372

$ find . -name "*.tr?"  -mtime 1   |wc
   1552    1552   74634

$ find . -name "*.tr?"  -mtime +1   |wc
    634     634   13968

--//實際上你會以為是-print的問題,實際上寫成如下:
$ find . -name "*.tr?"  -mtime +1   -print |wc
    634     634   13968

--//實際上你不寫-print,預設就是print。看了半天文件我也沒有搞明白自己錯誤在哪裡。視乎下面內容說明問題。
$ man find
....
EXPRESSIONS
The  expression  is made up of options (which affect overall operation rather than the processing of a specific
file, and always return true), tests (which return a true or false value), and actions (which have side effects
and return a true or false value), all separated by operators.  and is assumed where the operator is omitted.

If the expression contains no actions other than -prune, -print is performed on all files for which the
expression is true.

--//注意最後這一句。總之如果有print最後放在最後或者乾脆不寫。實際上寫成如下也是正確的。

$ find . -name "*.tr?" -prune  -mtime +1|wc
    634     634   13968

--//總之在使用find加刪除操作前注意看一下,-print最好不寫.
--//順便複習一下touch以及find操作。

#  touch -d '2020-07-16 16:55:00.000' /tmp/20200716165500
#  touch -t '202007161655' /tmp/20200716165500x
#  touch -t '202007161655.00' /tmp/20200716165500y

#  ls -l /tmp/20200716165500*
-rw-r----- 1 root root 0 2020-07-16 16:55:00 /tmp/20200716165500
-rw-r----- 1 root root 0 2020-07-16 16:55:00 /tmp/20200716165500x
-rw-r----- 1 root root 0 2020-07-16 16:55:00 /tmp/20200716165500y
--//這樣可以建立一個時間戳等於'2020-07-16 16:55:00.000'的檔案。

#  find . "*.tr?" -newer /tmp/20200716165500
--//取反可以使用-not 或者!
#  find . "*.tr?" -not -newer /tmp/20200716165500
#  find . "*.tr?" ! -newer /tmp/20200716165500

--//find查詢特定範圍的檔案,以前的測試做一個記錄。
touch -t '201111140000' /tmp/start_of_20111114
touch -t '201111141200' /tmp/end_of_20111114
find . -newer /tmp/start_of_20111114 ! -newer /tmp/end_of_20111114 -print

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2766983/,如需轉載,請註明出處,否則將追究法律責任。