find是个很有用的命令,记录下一些好玩的用法

将某后缀文件移动到指定目录

mv命令移动大量文件时,遇到了“Argument list too long”错误

这时可以使用find+mv组合操作

find -maxdepth 1 -name '*.jpg' -exec mv -t path/to/move {} +

mac下

find . -name '*.jpg*' -exec mv {} path/to/move \;

将某后缀文件复制到指定目录

find -maxdepth 1 -name '*.jpg' -exec cp {} path/to/move \;

统计某文件名后缀的数量

find -type f -name '*.jpg'  | wc -l

批量删除空文件(大小等于0的文件)的方法

find . -name "*" -type f -size 0c | xargs -n 1 rm -f

批量删除大于0文件的方法

find . -name "*" -type f -size +0c | xargs -n 1 rm -f

类似的,小于某大小文件用减号-

将大于0的txt文件的同名文件拷贝到其他目录

将find查找到的文件用awk分割出文件名,再拼接出cp指令执行

find . -name "*.txt" -type f -size +0c | awk -F "." '{print "cp ."$2"* /pathA"}' | sh

文件名相同的,后缀不同的,将只有一个的找出来并移动到另一个文件夹

find . -name "*" | awk -F . '{print $2}' | sort | uniq -c | grep "1 /" | awk -F '1 /' '{print "mv "$2"* ../path"}' | sh

find grep sed 实现批量搜索文件,并替换字符串

find -name "*.xml"| grep "rCN" | xargs grep  测试字符1  -l | xargs sed -i "s/测试字符1/测试字符2/g"

find 就不说了;

第一个grep,不需要xargs,为何?因为这个grep查找的不是文件内容,而是路径本身,检查find的取得的文件路径是否包括"rCN";

第二个grep,需要xargs,为何?因为这个grep要搜索的是文件内容,而非文件路径,查找文件内容存在"测试字符1"这个字符串,

然后,-l 参数为示只输出文件路径;

最后用sed来替换此文件中的“测试字符1”为"测试字符2"

sed的-i参数:表示修改文件内容,并非输出到终端。

完成。

温馨提示:

最好先执行一下find -name “*.xml”| grep “rCN” | xargs grep 测试字符1,看看结果是否为想要的结果,然后再加上sed的处理;

如果路径里面有空格

find -name "*.xml" -print0| grep "rCN" | xargs -0 grep  测试字符1  -l | xargs sed -i "s/测试字符1/测试字符2/g"

统计不同后缀的文件数量

find  -type f -name "*.*" | cut -f3 -d'.' | sort | uniq -c -i

记录

find -type f -name '*alarm_noclasp*' -exec bash -c 'echo {};imgcat {};read -t 60 -s -n 1' \;
find ./ -name "*alarm_noclasp*"|xargs ls -t  |xargs -I file -p bash -c 'echo file; imgcat file;' \;

待实现

  • 文件名相同的,后缀不同的,有的有2个或多个,有的只有一个,将只有一个的找出来

  • 利用find+md5找出多个文件夹中相同文件夹(已经利用fdupes实现),想用更通用的方法再实现一遍,参考

参考

https://blog.csdn.net/yasi_xi/article/details/50625110

https://www.ostechnix.com/find-files-bigger-smaller-x-size-linux/

https://blog.csdn.net/EmMouse/article/details/53672318

带空格文件名的处理(find xargs grep ..etc)