Find 命令的使用
时间:2007-04-24 来源:ahhy
Find 命令的一般形式:
find pathname -options [-print -exec -ok]
* -exec find 命令对所匹配的文件执行该参数所给出的 shell 命令。相应的命令形式为:'command' {} \;,注意 {} 和 \; 之间的空格。
* -ok 和 -exec 的作用相同,只是在执行命令之前,给出提示。 1,命令选项 -name 按文件名来查找 -perm 按照文件权限来查找 -user 按照文件属主
-group 按照文件所属组 -mtime n 文件更改时间,-n 表示距离现在 n 天以内,+n 表示距离现在 n 天以前 -atime n 查找在指定时间曾被存取过的文件或目录 -ctime n 查找在指定时间之时被更改的文件或目录 -newer f1 查找其更改时间较指定文件或目录 - f1 - 的更改时间更接近现在的文件或目录 -type x 查找某一类型的文件
b --- 块设备文件
d --- 目录
c --- 字符设备文件
p --- 管道文件
l --- 符号链接文件
f --- 普通文件
s --- socket
n --- Network special file -size n[c] 查找符合指定的文件大小的文件,带有 c 时表示字节,不带 c 表示块为单位 -fstype <文件系统类型> 只寻找该文件系统类型下的文件或目录,这些文件系统类型通常可以在 /etc/fstab 中配置的 -follow 如果遇到符号链接文件,则转向其实际指向文件 -cpio device 对符合的文件使用 cpio 命令,备份到指定 device 中 2,相关命令选项的使用 * 使用 name 选项 eg: 在当前目录及其子目录中查找文件名以一个大写字母开头的文件 find . -name '[A-Z]*' -print eg: 在当前目录及其子目录中查找文件名以两个小写字母然后是两个数字开头的文件 find . -name '[a-z][a-z][0-9][0-9]*' -print * perm 选项 eg: 在当前目录下查找文件权限位为7 5 5的文件,即文件属主可以读、写、执行,其他用
户可以读、执行的文件 find . -perm 755 -print eg: 在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),可以使用 find 命令的 -perm 选项。在八进制数字前面要加一个横杠-。在下面的命令中 -perm 代表按照文件权限查找,而 "007" 和你在c h m o d命令的绝对模式中所采用的表示法完全相同 find . -perm -007 -print * user 和 nouser 选项
eg: 在 $HOME 目录中查找文件属主为 bill 的文件 find - -user bill -name 'process*' -print eg: 为了查找属主帐户已经被删除的文件,可以使用 -nouser 选项。这样就能够找到那些属主在 /etc/passwd 文件中没有有效帐户的文件。在使用 -nouser 选项时,不必给出用户名;find 命令能够为你完成相应的工作 find /home -nouser -print * 按照更改时间查找文件 eg: 在系统根目录下查找更改时间在5日以内的文件 find / -mtime -5 -print eg: 在 /bill/src 目录下查找更改时间在3日以前的文件 find /bill/src -mtime +3 -print * 查找比某个文件新或旧的文件 eg: 查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用 -newer 选项。它的一般形式为: newest_file_name ! oldest_file_name eg: 查找更改时间比文件 gather01.cpp 新但比文件 gather03.cpp 旧的文件 find . -newer gather01.cpp ! gather03.cpp -exec ls -l {} \; * type 选项 eg: 在 /etc 目录下查找所有的目录 find /etc -type d -print eg: 在当前目录下查找除目录以外的所有类型的文件 find . ! -type d -print * size 选项 eg: 在 /bill 目录下查找文件长度恰好为 100 字节的文件 find /bill -size 100c -print eg: 在当前目录下查找长度超过 10 块的文件(一块等于 512 字节)
find . -size +10 -print * 使用 exec 或 ok 来执行 shell 命令 eg: 在 /logs 目录中查找更改时间在 5 日以前的文件并删除它们 find /logs -type f -mtime +5 -exec rm {} \; * 其他一些例子: eg: 在当前目录中查找 suid 置位,文件属主具有读、写、执行权限,并且文件所属组的用户和其他用户具有读和执行的权限的文件 find . -type f -perm 4755 -print 3,xargs 命令 在使用 find 命令的 -exec 选项处理匹配到的文件时,find 命令将所有匹配到的文件一起传递给 exec 执行。不幸的是,有些系统对能够传递给 exec 的命令长度有限制,这样在 find 命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是 xargs 命令的用处所在,特别是与 find 命令一起使用。Find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 另外,在使用 xargs 命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。 eg: 查找系统中的每一个普通文件,然后使用 xargs 命令来测试它们分别属于哪类文件: find / -type f -print | xargs file eg: 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到 /bill1/bill/hhy/core.log 文件中 find / -name "core" -print | xargs echo "" > /bill1/bill/hhy/core.log eg: 用 grep 命令在所有的普通文件中搜索 device 这个词 find / -type f -print | xargs grep "device"
* -ok 和 -exec 的作用相同,只是在执行命令之前,给出提示。 1,命令选项 -name 按文件名来查找 -perm 按照文件权限来查找 -user 按照文件属主
-group 按照文件所属组 -mtime n 文件更改时间,-n 表示距离现在 n 天以内,+n 表示距离现在 n 天以前 -atime n 查找在指定时间曾被存取过的文件或目录 -ctime n 查找在指定时间之时被更改的文件或目录 -newer f1 查找其更改时间较指定文件或目录 - f1 - 的更改时间更接近现在的文件或目录 -type x 查找某一类型的文件
b --- 块设备文件
d --- 目录
c --- 字符设备文件
p --- 管道文件
l --- 符号链接文件
f --- 普通文件
s --- socket
n --- Network special file -size n[c] 查找符合指定的文件大小的文件,带有 c 时表示字节,不带 c 表示块为单位 -fstype <文件系统类型> 只寻找该文件系统类型下的文件或目录,这些文件系统类型通常可以在 /etc/fstab 中配置的 -follow 如果遇到符号链接文件,则转向其实际指向文件 -cpio device 对符合的文件使用 cpio 命令,备份到指定 device 中 2,相关命令选项的使用 * 使用 name 选项 eg: 在当前目录及其子目录中查找文件名以一个大写字母开头的文件 find . -name '[A-Z]*' -print eg: 在当前目录及其子目录中查找文件名以两个小写字母然后是两个数字开头的文件 find . -name '[a-z][a-z][0-9][0-9]*' -print * perm 选项 eg: 在当前目录下查找文件权限位为7 5 5的文件,即文件属主可以读、写、执行,其他用
户可以读、执行的文件 find . -perm 755 -print eg: 在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),可以使用 find 命令的 -perm 选项。在八进制数字前面要加一个横杠-。在下面的命令中 -perm 代表按照文件权限查找,而 "007" 和你在c h m o d命令的绝对模式中所采用的表示法完全相同 find . -perm -007 -print * user 和 nouser 选项
eg: 在 $HOME 目录中查找文件属主为 bill 的文件 find - -user bill -name 'process*' -print eg: 为了查找属主帐户已经被删除的文件,可以使用 -nouser 选项。这样就能够找到那些属主在 /etc/passwd 文件中没有有效帐户的文件。在使用 -nouser 选项时,不必给出用户名;find 命令能够为你完成相应的工作 find /home -nouser -print * 按照更改时间查找文件 eg: 在系统根目录下查找更改时间在5日以内的文件 find / -mtime -5 -print eg: 在 /bill/src 目录下查找更改时间在3日以前的文件 find /bill/src -mtime +3 -print * 查找比某个文件新或旧的文件 eg: 查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用 -newer 选项。它的一般形式为: newest_file_name ! oldest_file_name eg: 查找更改时间比文件 gather01.cpp 新但比文件 gather03.cpp 旧的文件 find . -newer gather01.cpp ! gather03.cpp -exec ls -l {} \; * type 选项 eg: 在 /etc 目录下查找所有的目录 find /etc -type d -print eg: 在当前目录下查找除目录以外的所有类型的文件 find . ! -type d -print * size 选项 eg: 在 /bill 目录下查找文件长度恰好为 100 字节的文件 find /bill -size 100c -print eg: 在当前目录下查找长度超过 10 块的文件(一块等于 512 字节)
find . -size +10 -print * 使用 exec 或 ok 来执行 shell 命令 eg: 在 /logs 目录中查找更改时间在 5 日以前的文件并删除它们 find /logs -type f -mtime +5 -exec rm {} \; * 其他一些例子: eg: 在当前目录中查找 suid 置位,文件属主具有读、写、执行权限,并且文件所属组的用户和其他用户具有读和执行的权限的文件 find . -type f -perm 4755 -print 3,xargs 命令 在使用 find 命令的 -exec 选项处理匹配到的文件时,find 命令将所有匹配到的文件一起传递给 exec 执行。不幸的是,有些系统对能够传递给 exec 的命令长度有限制,这样在 find 命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是 xargs 命令的用处所在,特别是与 find 命令一起使用。Find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 另外,在使用 xargs 命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。 eg: 查找系统中的每一个普通文件,然后使用 xargs 命令来测试它们分别属于哪类文件: find / -type f -print | xargs file eg: 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到 /bill1/bill/hhy/core.log 文件中 find / -name "core" -print | xargs echo "" > /bill1/bill/hhy/core.log eg: 用 grep 命令在所有的普通文件中搜索 device 这个词 find / -type f -print | xargs grep "device"
相关阅读 更多 +