find--常用精选

1、查找重复的文件(基于md5)

find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35- 

2、寻找最大的10个文件

find / -type f 2>/dev/null | xargs du 2>/dev/null | sort -n | tail -n 10 | cut -f 2 | xargs -n 1 du -h

3、寻找文件名长度前10的文件

find | sed -e "s/^.*\///" | awk ' BEGIN { FS=""} { print NF "  " $0  } ' | sort -nrf | head -10

4、递归列出最新修改的文件

find . -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort 

5、找到包含 pattern 的所有文件,使用vi打开它们并把光标置于第一个匹配的位置(使用'n'和':n'进行导航)

find . -type f -exec grep -l pattern {} \; | xargs vi +/pattern

6、删除所有 文件名不为 abc 的文件

find * -maxdepth 1 -type f ! -name abc -delete 

7、文件大小求和

find . -type f -printf %s\\n | paste -sd+ | bc 

8、删除文件名符合特定格式的并且15天前的文件

find /backup/directory -name "FILENAME_*" -mtime +15 | xargs rm -vf 

9、将子目录的所有内容都移动到当前目录

find -type f -exec mv {} . \; 

10、在adb 上 安装整个文件夹中的.apk

find ~/path/to/apk/files -name '*.apk' -exec adb install {} \; 

11、递归修改目录为777

find . -exec chmod 777 {} \; 

12、带有完整路径ls命令

find `pwd` -maxdepth 1 -exec ls --color -d {} \; 

13、当前目录里边文本文件的个数

file -i * | grep 'text/plain' | wc -l 

14、将缺少.md5的文件 自动补上.md5

find . ! -name \*.md5 -exec 'md5sum "{}" > "{}".md5' \;

15、用find删除文件时候排除特定文件

find . ! -name -delete 

16、递归删除空目录

find . -depth -type d -empty -exec rmdir -v {} + 

17、把 子目录 添加到 svn ignore 中(忽略)

find . -type d -not \( -name .svn -prune \) -exec svn propset svn:ignore '*' {} \; 

18、寻找main文件 cpp

find . -name "*.cpp" -exec grep -Hn --color=tty -d skip "main" {} \; 

19、执行前检查

find /tmp -type f -printf 'rm "%p";\n' 

20、递归的改变扩展名

find . -type f -name \*.c | while read f; do mv $f "`basename $f .c`".C; done 

21、使用 find sed 批量重命名

find . -exec bash -c "mv '{}' '\`echo {} |sed -e 's/foo/bar/g'\`"' \; 

22、查找文件并计算md5

find -type f | grep -v "^./.git" | xargs md5sum | md5sum 

23、 模拟DOS 的 tree

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' 

24、运行多个脚本

find /var/scripts -name 'backup*' -exec {} ';' 

25、列出用户目录下具有指定格式后缀的文件,然后移除文件后缀

find /home -print -exec rename -v 's/_2009-09-04.suffix$//' {} \; 

26、计算指定扩展名的所有文件的总大小,单位为MB

find . -type f -iname '*.msh' -exec ls -lG {} \; | awk '{total = total + $4}END{print "scale=2;" total "/2^20"}' | bc 

27、修改当前目录中所有目录的权限

find ./ -type d | xargs sudo chmod 755 

28、统计代码行数,返回总和

find . \( -iname '*.cpp' -o -iname '*.h' \) -exec wc -l {} \; | sort -n | cut --delimiter=.  -f 1 | awk '{s+=$1} END {print s}' 

29、递归的在当前目录中所有的c++文件中搜索

find . -name '*.?pp' | xargs grep -H "string" 

30、递归的打印工作目录内的所有硬链接

find . -type f -a \! -links 1 

31、制作一个zip压缩包,将.svn目录排除在

find . -not \( -name .svn -prune \) -type f | xargs zip XXXXX.zip 

32、递归给.sh加权限

find ./ -name "*.sh" -exec chmod +x {} \; 

33、显示排序列表文件的大小超过1MB的当前目录

find . -maxdepth 1 -type f -size +1M -printf "%f:%s\n" | sort -t":" -k2 

34、使用file查看设备信息(man file查看更多关于file的信息)

file -s /dev/sd* 

35、找出超过设置尺寸的所有文件并且按设置的格式显示

find / -type f -size +512000 | xargs ls -lh | awk '{ print $5 " " $6$7 ": " $9 }' 

36、批量编码转换

find . -iname *.java -type f -exec bash -c "iconv -f GBK -t UTF-8 {}  > {}.tmp " \; -exec mv {}.tmp {} \;

37、清理 ._ 文件 (OS X)

find . -name ._\* -exec rm -f {} \; 

38、选择性的grep

find /path -name \*.php -user nobody -exec grep -nH whatever {} \; grep selectively 

39、寻找文件并且按照修改时间排序

find -type f | xargs ls -1tr 

你可能感兴趣的:(find--常用精选)