簡介
在這篇文章中,我們會示範使用 find -ok
和 find -okdir
這兩個指令,這兩個指令跟 find -exec
和 find -execdir
有一樣的功能,不過,在執行指令前,他們先會跟你確認你是否真的想在該檔案上執行該指令,如果你想要更加小心,這些指令會是你的好幫手。
我們已經在這篇文章中解釋過 find -exec
和 find -execdir
之間的分別,今次我們不會再作解釋,如果你有興趣,可以看看該篇文章。
讓我們一起看看這些指令有甚麼不同吧。
- 創建以下的檔案架構。
noob@learnfromnoobs:~$ tree find-test/
find-test/
├── dir1
│ └── myfile1
└── dir2
└── myfile2
2 directories, 2 files
我們可以用以下的指令創建上述檔案架構。
$ mkdir find-test
$ mkdir find-test/dir1
$ mkdir find-test/dir2
$ touch find-test/dir1/myfile1
$ touch find-test/dir2/myfile2
‘find -ok’ vs ‘find -exec’
- 在 find-test 下執行
find -exec
。
noob@learnfromnoobs:~/find-test$ find . -name 'myfile*' -exec ls -l \;
total 8
drwxrwxr-x 2 noob noob 4096 Mar 7 03:31 dir1
drwxrwxr-x 2 noob noob 4096 Mar 7 03:31 dir2
total 8
drwxrwxr-x 2 noob noob 4096 Mar 7 03:31 dir1
drwxrwxr-x 2 noob noob 4096 Mar 7 03:31 dir2
- 在 find-test 下執行
find -ok
。
noob@learnfromnoobs:~/find-test$ find . -name 'myfile*' -ok ls -l \;
< ls ... ./dir1/myfile1 > ? yes
total 8
drwxrwxr-x 2 noob noob 4096 Mar 7 03:31 dir1
drwxrwxr-x 2 noob noob 4096 Mar 7 03:31 dir2
< ls ... ./dir2/myfile2 > ? no
我們可以看到,它會顯示即將執行的的指令(ls
)以及將會在哪個檔案上執行,指令只會在得到我們的確認後才會執行。
‘find -okdir’ vs ‘find -execdir’
- 在 find-test 下執行
find -execdir
。
noob@learnfromnoobs:~/find-test$ find . -name 'myfile*' -execdir ls -l \;
total 0
-rw-rw-r-- 1 noob noob 0 Jan 27 09:55 myfile1
total 0
-rw-rw-r-- 1 noob noob 0 Jan 27 09:55 myfile2
- 在 find-test 下執行
find -okdir
。
noob@learnfromnoobs:~/find-test$ find . -name 'myfile*' -okdir ls -l \;
< ls ... ./dir1/myfile1 > ? yes
total 0
-rw-rw-r-- 1 noob noob 0 Mar 7 03:31 myfile1
< ls ... ./dir2/myfile2 > ? no
跟 find -ok
一樣,find -okdir
都會先跟你確認你是否真的想執行該指令,但它跟在確認後,就會跟 find -execdir
一樣,在目標存在的位置執行指令。
總結
總結來說, find -exec
和 find -execdir
擁有跟 find -exec
和 find -execdir
一樣的功能, 但在執行指令前,它們會先要你確認,在上述例子中,你可能會覺得他們的作用不大,但試想想,如果你是在用 rm
來刪除檔案,它們就可以幫你保證你真的知道自己在做甚麼,以免不小心刪除錯檔案。
我希望你喜歡這篇文章,並從中得到新知識。
記得要不斷學習,have fun!