除了在一個(gè)目錄結(jié)構(gòu)下查找文件這種基本的操作,你還可以用find命令實(shí)現(xiàn)一些實(shí)用的操作,使你的命令行之旅更加簡(jiǎn)易。
本文將介紹15種無論是于新手還是老鳥都非常有用的linux find命令。
首先,在你的home目錄下面創(chuàng)建下面的空文件,來測(cè)試下面的find命令示例。
# vim create_sample_files.shtouch mybashprogram.shtouch mycprogram.ctouch mycprogram.ctouch program.cmkdir backupcd backuptouch mybashprogram.shtouch mycprogram.ctouch mycprogram.ctouch program.c# chmod x create_sample_files.sh# ./create_sample_files.sh# ls -r.:backup mybashprogram.sh mycprogram.ccreate_sample_files.sh mycprogram.c program.c./backup:mybashprogram.sh mycprogram.c mycprogram.c program.c1. 用文件名查找文件這是find命令的一個(gè)基本用法。下面的例子展示了用mycprogram.c作為查找名在當(dāng)前目錄及其子目錄中查找文件的方法。
# find -name \mycprogram.c\./backup/mycprogram.c./mycprogram.c2.用文件名查找文件,忽略大小寫這是find命令的一個(gè)基本用法。下面的例子展示了用mycprogram.c作為查找名在當(dāng)前目錄及其子目錄中查找文件的方法,忽略了大小寫。
# find -iname \mycprogram.c\./mycprogram.c./backup/mycprogram.c./backup/mycprogram.c./mycprogram.c3. 使用mindepth和maxdepth限定搜索指定目錄的深度在root目錄及其子目錄下查找passwd文件。
# find / -name passwd./usr/share/doc/nss_ldap-253/pam.d/passwd./usr/bin/passwd./etc/pam.d/passwd./etc/passwd在root目錄及其1層深的子目錄中查找passwd. (例如root — level 1, and one sub-directory — level 2)
# find -maxdepth 2 -name passwd./etc/passwd在root目錄下及其最大兩層深度的子目錄中查找passwd文件. (例如 root — level 1, and two sub-directories — level 2 and 3 )
# find / -maxdepth 3 -name passwd./usr/bin/passwd./etc/pam.d/passwd./etc/passwd在第二層子目錄和第四層子目錄之間查找passwd文件。
# find -mindepth 3 -maxdepth 5 -name passwd./usr/bin/passwd./etc/pam.d/passwd4. 在find命令查找到的文件上執(zhí)行命令下面的例子展示了find命令來計(jì)算所有不區(qū)分大小寫的文件名為“mycprogram.c”的文件的md5驗(yàn)證和。{}將會(huì)被當(dāng)前文件名取代。
find -iname \mycprogram.c\ -exec md5sum {} \\;d41d8cd98f00b204e9800998ecf8427e ./mycprogram.cd41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.cd41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.cd41d8cd98f00b204e9800998ecf8427e ./mycprogram.c5. 相反匹配顯示所有的名字不是mycprogram.c的文件或者目錄。由于maxdepth是1,所以只會(huì)顯示當(dāng)前目錄下的文件和目錄。
find -maxdepth 1 -not -iname \mycprogram.c\../mybashprogram.sh./create_sample_files.sh./backup./program.c6. 使用inode編號(hào)查找文件任何一個(gè)文件都有一個(gè)獨(dú)一無二的inode編號(hào),借此我們可以區(qū)分文件。創(chuàng)建兩個(gè)名字相似的文件,例如一個(gè)有空格結(jié)尾,一個(gè)沒有。
touch \test-file-name\# touch \test-file-name \[note: there is a space at the end]# ls -1 test*test-file-nametest-file-name從ls的輸出不能區(qū)分哪個(gè)文件有空格結(jié)尾。使用選項(xiàng)-i,可以看到文件的inode編號(hào),借此可以區(qū)分這兩個(gè)文件。
ls -i1 test*16187429 test-file-name16187430 test-file-name你可以如下面所示在find命令中指定inode編號(hào)。在此,find命令用inode編號(hào)重命名了一個(gè)文件。
find -inum 16187430 -exec mv {} new-test-file-name \\;# ls -i1 *test*16187430 new-test-file-name16187429 test-file-name你可以在你想對(duì)那些像上面一樣的糟糕命名的文件做某些操作時(shí)使用這一技術(shù)。例如,名為file?.txt的文件名字中有一個(gè)特殊字符。若你想執(zhí)行“rm file?.txt”,下面所示的所有三個(gè)文件都會(huì)被刪除。所以,采用下面的步驟來刪除”file?.txt”文件。
lsfile1.txt file2.txt file?.txt找到每一個(gè)文件的inode編號(hào)。
ls -i1804178 file1.txt804179 file2.txt804180 file?.txt如下所示:?使用inode編號(hào)來刪除那些具有特殊符號(hào)的文件名。
find -inum 804180 -exec rm {} \\;# lsfile1.txt file2.txt[note: the file with name \file?.txt\ is now removed]7. 根據(jù)文件權(quán)限查找文件下面的操作時(shí)合理的:
找到具有指定權(quán)限的文件忽略其他權(quán)限位,檢查是否和指定權(quán)限匹配根據(jù)給定的八進(jìn)制/符號(hào)表達(dá)的權(quán)限搜索此例中,假設(shè)目錄包含以下文件。注意這些文件的權(quán)限不同。
ls -ltotal 0-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read---------- 1 root root 0 2009-02-19 20:31 no_for_all-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read找到具有組讀權(quán)限的文件。使用下面的命令來找到當(dāng)前目錄下對(duì)同組用戶具有讀權(quán)限的文件,忽略該文件的其他權(quán)限。
find . -perm -g=r -type f -exec ls -l {} \\;-rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read-rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read-rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read找到對(duì)組用戶具有只讀權(quán)限的文件。
find . -perm g=r -type f -exec ls -l {} \\;----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read找到對(duì)組用戶具有只讀權(quán)限的文件(使用八進(jìn)制權(quán)限形式)。
find . -perm 040 -type f -exec ls -l {} \\;----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read8. 找到home目錄及子目錄下所有的空文件(0字節(jié)文件)下面命令的輸出文件絕大多數(shù)都是鎖定文