記錄下linux下find命令查找的常用用法

find命令是linux非常常用的命令,這裏記錄下find命令查找多種類型文件的用法。

1.匹配多種類型的文件。

一般下面兩種做法就夠用:
1)使用-name或者-iname選項,後者忽略大小寫,再用-o選項連接來搜索多種類型文件。-o表示or或的意思。
$ find ./ -name "*.mk" -o -name "*.java" -type f
./tests/src/com/android/voicedialer/VoiceDialerLaunchPerformance.java
./tests/Android.mk
./CleanSpec.mk
./src/com/android/voicedialer/VoiceContact.java
./src/com/android/voicedialer/VoiceDialerActivity.java
./src/com/android/voicedialer/RecognizerEngine.java
./src/com/android/voicedialer/VoiceDialerReceiver.java
./src/com/android/voicedialer/CommandRecognizerEngine.java
./src/com/android/voicedialer/RecognizerLogger.java
./src/com/android/voicedialer/PhoneTypeChoiceRecognizerEngine.java
./src/com/android/voicedialer/VoiceDialerTester.java
./src/com/android/voicedialer/RecognizerClient.java
./Android.mk
注意:需要將匹配內容用雙引號括起來,防止未知錯誤,比如只搜索了當前目錄的文件。


2)使用-regex或者-iregex選項,後者忽略大小寫,該選項使用正則表達式匹配整個路徑,與-name不同。
$ find ./ -regex ".*\.mk$\|.*\.java$" -type f
./tests/src/com/android/voicedialer/VoiceDialerLaunchPerformance.java
./tests/Android.mk
./CleanSpec.mk
./src/com/android/voicedialer/VoiceContact.java
./src/com/android/voicedialer/VoiceDialerActivity.java
./src/com/android/voicedialer/RecognizerEngine.java
./src/com/android/voicedialer/VoiceDialerReceiver.java
./src/com/android/voicedialer/CommandRecognizerEngine.java
./src/com/android/voicedialer/RecognizerLogger.java
./src/com/android/voicedialer/PhoneTypeChoiceRecognizerEngine.java
./src/com/android/voicedialer/VoiceDialerTester.java
./src/com/android/voicedialer/RecognizerClient.java
./Android.mk
注意:這裏是正則表達式,一些字符比如點.的含義與-name中用到的有區別,而且是對整個路徑匹配,不只是basename。

上面兩個命令,實現了類似的功能,搜索列出以.mk和.java結尾的文件。

2.匹配除需要類型之外的文件

跟上面差不多,也是用-name或-regex選項,配合-not,-a等邏輯控制。-a表示and與的意思。-not可用!代替。
1)使用-name或者-iname選項
$ find ./ ! -name "*.java" -a ! -name "*.xml" -type f
./res/drawable-mdpi/ic_vd_retry.png
./res/drawable-mdpi/ic_vd_mic_on.png
./res/drawable-mdpi/ic_vd_mic_off.png
./res/drawable-mdpi/ic_vd_green_key.png
./res/drawable-mdpi/app_voicedialer.png
./res/drawable-hdpi/ic_vd_retry.png
./res/drawable-hdpi/ic_vd_mic_on.png
./res/drawable-hdpi/ic_vd_mic_off.png
./res/drawable-hdpi/ic_vd_green_key.png
./res/drawable-hdpi/app_voicedialer.png
./tests/Android.mk
./NOTICE
./CleanSpec.mk
./.git/HEAD
./.git/index
./Android.mk
./MODULE_LICENSE_APACHE2

2)使用-regex或者-iregex選項,因爲posix的正則表達式不支持環視功能,所以需配合-not邏輯。
$ find ./ -not -regex ".*\(\.xml\|\.java\)$" -type f
./res/drawable-mdpi/ic_vd_retry.png
./res/drawable-mdpi/ic_vd_mic_on.png
./res/drawable-mdpi/ic_vd_mic_off.png
./res/drawable-mdpi/ic_vd_green_key.png
./res/drawable-mdpi/app_voicedialer.png
./res/drawable-hdpi/ic_vd_retry.png
./res/drawable-hdpi/ic_vd_mic_on.png
./res/drawable-hdpi/ic_vd_mic_off.png
./res/drawable-hdpi/ic_vd_green_key.png
./res/drawable-hdpi/app_voicedialer.png
./tests/Android.mk
./NOTICE
./CleanSpec.mk
./.git/HEAD
./.git/index
./Android.mk
./MODULE_LICENSE_APACHE2

上面兩個都匹配.xml和.java之外的文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章