除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易。
复制代码代码示例:
# vim create_sample_files.sh
touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c mkdir backup cd backup touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c # chmod +x create_sample_files.sh # ./create_sample_files.sh # ls -R .: backup MybashProgram.sh MyCProgram.c create_sample_files.sh mycprogram.c Program.c ./backup: MybashProgram.sh mycprogram.c MyCProgram.c Program.c
1. 用文件名查找文件
复制代码代码示例:
# find -name "MyCProgram.c"
./backup/MyCProgram.c ./MyCProgram.c
2.用文件名查找文件,忽略大小写
复制代码代码示例:
# find -iname "MyCProgram.c"
./mycprogram.c ./backup/mycprogram.c ./backup/MyCProgram.c ./MyCProgram.c
3. 使用mindepth和maxdepth限定搜索指定目录的深度
复制代码代码示例:
# 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/passwd
4. 在find命令查找到的文件上执行命令
复制代码代码示例:
find -iname "MyCProgram.c" -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c
5. 相反匹配
复制代码代码示例:
find -maxdepth 1 -not -iname "MyCProgram.c"
. ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c
6. 使用inode编号查找文件
复制代码代码示例:
touch "test-file-name"
# touch "test-file-name " [Note: There is a space at the end] # ls -1 test* test-file-name test-file-name
从ls的输出不能区分哪个文件有空格结尾。使用选项-i,可以看到文件的inode编号,借此可以区分这两个文件。
复制代码代码示例:
ls -i1 test*
16187429 test-file-name 16187430 test-file-name
可以如下面所示在find命令中指定inode编号。在此,find命令用inode编号重命名了一个文件。
复制代码代码示例:
find -inum 16187430 -exec mv {} new-test-file-name \;
# ls -i1 *test* 16187430 new-test-file-name 16187429 test-file-name
可以在你想对那些像上面一样的糟糕命名的文件做某些操作时使用这一技术。
复制代码代码示例:
ls
file1.txt file2.txt file?.txt
找到每一个文件的inode编号。
复制代码代码示例:
ls -i1
804178 file1.txt 804179 file2.txt 804180 file?.txt
如下所示:?使用inode编号来删除那些具有特殊符号的文件名。
复制代码代码示例:
find -inum 804180 -exec rm {} \;
# ls file1.txt file2.txt [Note: The file with name "file?.txt" is now removed]
7. 根据文件权限查找文件
复制代码代码示例:
ls -l
total 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
找到具有组读权限的文件。使用下面的命令来找到当前目录下对同组用户具有读权限的文件,忽略该文件的其他权限。
复制代码代码示例:
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
找到对组用户具有只读权限的文件。
复制代码代码示例:
find . -perm g=r -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
找到对组用户具有只读权限的文件(使用八进制权限形式)。
复制代码代码示例:
find . -perm 040 -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
8. 找到home目录及子目录下所有的空文件(0字节文件)
9. 查找5个最大的文件
复制代码代码示例:
find . -type f -exec ls -s {} \; | sort -n -r | head -5
10. 查找5个最小的文件
复制代码代码示例:
find . -type f -exec ls -s {} \; | sort -n | head -5
上面的命令中,很可能你看到的只是空文件(0字节文件)。如此,你可以使用下面的命令列出最小的文件,而不是0字节文件。
复制代码代码示例:
find . -not -empty -type f -exec ls -s {} \; | sort -n | head -5
11. 使用-type查找指定文件类型的文件
只查找socket文件
find . -type s 查找所有的目录 find . -type d 查找所有的一般文件 find . -type f 查找所有的隐藏文件 find . -type f -name ".*" 查找所有的隐藏目录 find -type d -name ".*"
12. 通过和其他文件比较修改时间查找文件
复制代码代码示例:
ls -lrt
total 0 -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 -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -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 ---------- 1 root root 0 2009-02-19 20:31 no_for_all # find -newer ordinary_file . ./everybody_read ./all_for_all ./no_for_all
13. 通过文件大小查找文件
查找比指定文件大的文件
find ~ -size +100M 查找比指定文件小的文件 find ~ -size -100M 查找符合给定大小的文件 find ~ -size 100M 注意: – 指比给定尺寸小,+ 指比给定尺寸大。没有符号代表和给定尺寸完全一样大。
14. 给常用find操作取别名
复制代码代码示例:
常用的删除a.out文件。
alias rmao="find . -iname a.out -exec rm {} \;" # rmao 删除c程序产生的core文件。 alias rmc="find . -iname core -exec rm {} \;" # rmc
15. 用find命令删除大型打包文件
复制代码代码示例:
alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"
(责任编辑:IT)# alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;" # alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;" # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;" # rm100m # rm1g # rm2g # rm5g |