exec/xargs in find

查找当前目录下以 anaconda 开头的文件,并查找其中的 evince 字符串
# find . -name "anaconda*" -exec grep -i evince {} \;

查找当前目录下的 install.log 文件,并做 md5 校验
# find . -name "install.log" -exec md5sum {} \;

查找 /var/log 下的 error 日志,将其移除
# find /var/log/ -name "error*" -exec mv {} /trash \;

查找当前目录下以 a 开头的文件,将其加上后缀 .log
# find . -name "a*" -print | xargs -i mv {} {}.log
# find . -name "a*" -exec mv {} {}.log \;

查找当前目录下以 a 开头的文件,并将其列出
# find . -name "a*" -exec ls -l {} \;

删除 0 字节的文件
# find -type f -size 0 -exec rm -rf {} \;

查找当前目录下的 jpg 文件,并统计其大小总和
# find . -name "*.jpg" -exec wc -c {} \; | awk '{print $1}' | awk '{a+=$1}END{print a}'

统计 /var 目录下文件以 M 为大小,以列表形式列出来
# find /var -type f | xargs ls -s | sort -nr | awk '{size=$1/1024;printf("%dMb %s\n",size,$2);}' | head

查找 /var 目录下大于 100M 的文件,并统计文件的个数
# find /var -size +100M -type f | tee file | wc -l

统计一个目录中的全部文件数
# find ./ -type f -print | wc -l

统计一个目录中的全部子目录数
# find ./ -type d -print | wc -l

查找 bk 结尾的文件使用 gzip 压缩
# find ./ -name "*.bk" -exec gzip {} \;

将其解压缩
# find ./ -name "*.bk.zip" -exec gzip -d {} \;

将当前目录下的文件使用 tar 压缩
# find ./ -type f | xargs tar -zcvf bk.tgz

注意:有没有 -type 这个选项的最终结果是完全不一样的。

找出当前目录下 jpg 文件,并 tar 打包压缩
# find ./ -name "*.jpg" -print0 | xargs -0 tar -zcvf bk.tgz

找出名称是 8 个数字的文件夹
# find / -type d -regextype posix-egrep -regex '.*/[0-9]{}'

注意:如果使用绝对路径进行搜索,会导致搜索的路径比较深,最终会出现 “xargs: argument line too long” 的错误。可以通过控制 xargs 每次处理的条数进行控制。下面的命令使 xargs 每次处理 3 条
# find ./ -type f -print0 | xargs -0 -l3 rm -rf

将当前目录下的 jpg 图片转成灰色(迎接即将到来的互联网维护日)
# find ./ -type f -name "*jpg" -exec convert {} -colorspace Gray {} \;
要安装 ImageMagick 这个工具,更详细的 convert 请参见如下链接:
http://www.linuxbyte.org/linux-convert-mini-howto.html

以上命令参考若干篇博客,具体的源头也追述不清 =。=