find是咱們很經常使用的一個Linux命令,可是咱們通常查找出來的並不單單是看看而已,還會有進一步的操做,這個時候exec的做用就顯現出來了。shell
-exec 參數後面跟的是command命令,它的終止是以;爲結束標誌的,因此這句命令後面的分號是不可缺乏的,考慮到各個系統中分號會有不一樣的意義,因此前面加反斜槓。安全
{} 花括號表明前面find查找出來的文件名。操作系統
使用find時,只要把想要的操做寫在一個文件裏,就能夠用exec來配合find查找,很方便的。在有些操做系統中只容許-exec選項執行諸如l s或ls -l這樣的命令。大多數用戶使用這一選項是爲了查找舊文件並刪除它們。建議在真正執行rm命令刪除文件以前,最好先用ls命令看一下,確認它們是所要刪除的文件。 exec選項後面跟隨着所要執行的命令或腳本,而後是一對兒{ },一個空格和一個,最後是一個分號。爲了使用exec選項,必需要同時使用print選項。若是驗證一下find命令,會發現該命令只輸出從當前路徑起的相對路徑及文件名。code
命令:test
find . -type f -exec ls -l {} \;
輸出:file
[root@localhost home]# ls 1.log 2.log 3.c 4.log test [root@localhost home]# find -type f ./1.log ./2.log ./3.c [root@localhost home]# find -type f -exec ls -l {} \; -rw-r--r--. 1 root root 0 Nov 14 17:55 ./1.log -rw-r--r--. 1 root root 0 Nov 14 17:55 ./2.log -rwxrwxrwx. 1 root root 0 Nov 14 18:00 ./3.c
命令:command
find -type f -mtime -1 -exec rm {} \;
輸出:im
[root@localhost home]# ll total 0 -rw-r--r--. 1 root root 0 Nov 14 17:55 1.log -rw-r--r--. 1 root root 0 Nov 14 17:55 2.log -rwxrwxrwx. 1 root root 0 Nov 14 18:00 3.c drwxr-xr-x. 2 root root 6 Nov 14 18:16 4.log -rw-r--r--. 1 root root 0 Nov 15 18:02 5.log drwxr-xr-x. 2 root root 6 Nov 14 17:55 test [root@localhost home]# find -type f -mtime -1 ./5.log [root@localhost home]# find -type f -mtime -1 -exec rm {} \; [root@localhost home]# ls 1.log 2.log 3.c 4.log test
說明:腳本
在shell中用任何方式刪除文件以前,應當先查看相應的文件,必定要當心!當使用諸如mv或rm命令時,可使用-exec選項的安全模式。它將在對每一個匹配到的文件進行操做以前提示你。touch
命令:
find -name "*.log" -type f -mtime -1 -ok rm {} \;
輸出:
[root@localhost home]# touch 6.c [root@localhost home]# touch 7.c [root@localhost home]# ls 1.log 2.log 3.c 4.log 6.log 7.c test [root@localhost home]# ll total 0 -rw-r--r--. 1 root root 0 Nov 14 17:55 1.log -rw-r--r--. 1 root root 0 Nov 14 17:55 2.log -rwxrwxrwx. 1 root root 0 Nov 14 18:00 3.c drwxr-xr-x. 2 root root 6 Nov 14 18:16 4.log -rw-r--r--. 1 root root 0 Nov 15 18:07 6.log -rw-r--r--. 1 root root 0 Nov 15 18:07 7.c drwxr-xr-x. 2 root root 6 Nov 14 17:55 test [root@localhost home]# find -name "*.log" -mtime -1 -ok rm {} \; < rm ... ./6.log > ? y [root@localhost home]# ll total 0 -rw-r--r--. 1 root root 0 Nov 14 17:55 1.log -rw-r--r--. 1 root root 0 Nov 14 17:55 2.log -rwxrwxrwx. 1 root root 0 Nov 14 18:00 3.c drwxr-xr-x. 2 root root 6 Nov 14 18:16 4.log -rw-r--r--. 1 root root 0 Nov 15 18:07 7.c drwxr-xr-x. 2 root root 6 Nov 14 17:55 test [root@localhost home]# ls 1.log 2.log 3.c 4.log 7.c test
說明:
** -ok: 和-exec的做用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每個命令以前,都會給出提示,讓用戶來肯定是否執行。 **
命令:
find -name "*.log" -exec mv {} test \;
輸出:
[root@localhost home]# tree . ├── 1.log ├── 2.log ├── 3.c ├── 4.log ├── 7.c └── test 2 directories, 4 files [root@localhost home]# find -name "*.log" -exec mv {} test \; [root@localhost home]# ls 3.c 7.c test [root@localhost home]# tree . ├── 3.c ├── 7.c └── test ├── 1.log ├── 2.log └── 4.log 2 directories, 4 files