(linux) find command

find命令的主要功能是在系统中查找文件或目录:
 
find命令的一般形式为:find pathname -options [-print -exec -ok]
print为对匹配文件输出到标准输出,默认为标准输出,故可不写
exec为对匹配文件执行该参数给出的shell命令,形式为'command' {} \;
ok与exec类似,更安全,每步需要用户确认。
 
1.-name 根据文件名匹配。例如:
find ~ -name "test.txt" 在home路径及子目录下查找test.txt文件。
find . -name "[a-z][A-Z][0-9][0-9]*" 在当前路径及子目录下查找,一个小写字母加一个大写字母加两个数字开头的文件。
find / -name "*.txt" 查找所有txt文件。
 
2.-perm(permission)根据权限匹配。例如:
find . -perm 777 查找当前及子目录下所有权限为777的文件。(777意义详见chmod)
find . -perm -777 查找权限大于等于777的文件。+为小于等于。
 
3.-user 根据用户匹配。例如:
find . -user abc 查找abc属主的文件。
 
4.-nouser 查找属主账户已经被删除的文件。例如:
find . -nouser
 
5.-group,-nogroup 与user,nouser类似。
 
6.-mtime 根据更改时间匹配。例如:
find . -mtime -3 3天以内的
find . -mtime +4 4天以前的
 
7.-newer 根据更改时间匹配。例如:
find . -newer abc 更改时间比abc文件新的文件。
find . -newer abc ! -newer 123 -exec ls -l {} \; 更改时间比abc新但比123旧的文件,列出其详细信息。!为逻辑非。
 
8.-type 根据文件类型匹配。
文件类型:
b:块设备文件
d:目录
c:字符设备文件
p:管道文件
l:符号链接文件
f:普通文件

例如:
find . -type f #查找普通文件
$find . -type d -name 16M_Image #查找特定目录
 
9.-size 根据文件长度匹配。例如:
find . -size +1000000c 文件大于1M字节的文件。注意数字后面的c,c代表用字节计量。
find . -size 10 文件等于512块的文件。数字后没有c时,表示用块(1块=512字节)计量。
 
10.还可与xargs命令一同使用(后续介绍)。


======================================================================================
======================================================================================
                          linux find command

==========================================

格式: find [path...] [expression]
find / -name access_log 2>/dev/null 不显示错误信息
find / -amin n ##查找系统中最后N分钟访问的文件
find / -atime n ##查找系统中最后n*24小时访问的文件
find / -cmin n ##查找系统中最后N分钟被改变状态的文件
find / -ctime n ##查找系统中最后n*24小时被改变状态的文件
find / -empty ##查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
find / -false ##查找系统中总是错误的文件
find / -fstype type ##查找系统中存在于指定文件系统的文件,例如:ext2 .
find / -gid n ##查找系统中文件数字组 ID 为 n的文件
find / -group gname ##查找系统中文件属于gnam文件组,并且指定组和ID的文件
find / -mmin n # 查找在系统中最后n分钟里修改过的文件
find / -mtime n #查找在系统中最后24*n小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -size nc #查找在系统中长度为n字节的文件
find / -size +nc #查找在系统中长度大于n字节的文件
find / -daystart ##测试系统从今天开始24小时以内的文件,用法类似-amin
find / -depth ##使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
find / -follow ##遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
find / -help ##显示命令摘要
find / -maxdepth levels ##在某个层次的目录中按照递减方法查找
find / -mount ##不在文件系统目录中查找, 用法类似 -xdev.
find / -noleaf ##禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找

find / -version ##打印版本数字
-exec command; ##查找并执行命令
-fprint file ##打印文件完整文件名
-fprint0 file ##打印文件完整文件名包括空的文件
-fprintf file format ##打印文件格式
-ok command; ##给用户命令执行操作,根据用户的Y 确认输入执行
-printf format ##打印文件格式
-ls ##打印同种文件格式的文件.

几个参数之间可以用-and,-or连接,某个参数取反可用!
======================
用man find可以看到下面的说明:
-mtime n 
   Files data was last modified n*24 hours ago.  ===>  man find里面解释错误
find -mtime 4 是找到所有5天前4天后被更改的档案文件,
find -mtime -4 是4天内被改的档案,
find -mtime +4 是4天后被改的档案。
======================

查看某目录下有多少个文件命令:
# find DirPath -type f | wc -l
比如: find /home/snail -type f | wc -l

如果想查看 src 目录下有多少 C 文件,如下:
# find ./src -type f -name "*.c" | wc -l

find 命令的 -type 后的参数有以下选择,每种都代表不一样的“类型(type)”
-type 文件类型
        b      块文件(比如内存)
        c      字符文件(比如串口)
        d      目录文件(目录也是一种文件)
        p      有名管道(FIFO)
        f      普通文件
        l      符号链接(如果使用 -L 或 -follow 选项则不起作用,除非链接损坏)
        s      socket文件(比如 /tmp/mysql.sock)
        D      door (Solaris)

======================
文件查找命令  find
find 用于查找文件系统中指定文件,其格式为: find 要查找的路径 表达式
例如:  find . -name 1.txt        \\ 在当前目录及其子目录下查找文件1.txt
find /tmp -name 1.txt     \\ 在/tmp 目录及其子目录下查找文件1.txt

======================

查找Linux下的空目录技巧

if [ -z "$1" ]; then
 echo Usage: $0 \
 exit 1
fi
echo -e Null directory list:
for i in $(find $1 -type d -print)

do
 TMP=$(ls $i)
 if [ "$TMP" = "\." ]; then
  continue
 elif [ -z "$TMP" ]; then
  echo $i
 fi
done

======================

猜你喜欢

转载自haiouc.iteye.com/blog/1759503