查找指定扩展名文件并排除含特定字符串的路径时遭遇IO错误,求解决方法
嗨,我来帮你梳理下这个问题~
首先你遇到的这些Input/output error是关键信号,说明find命令在尝试访问那些路径的时候,底层存储出了问题——大概率是对应的磁盘分区有坏道、文件系统损坏,或者这些路径属于挂载的外部存储(比如移动硬盘)但连接不稳定,也有可能是权限限制导致无法读取(不过IO错误更偏向硬件/存储层面)。
给你几个实用的解决思路:
临时规避错误输出,让命令正常执行
如果暂时不想处理存储的问题,可以把find的错误输出重定向到/dev/null,这样就不会被一堆报错信息干扰了。同时可以优化你的命令,用find原生的参数排除路径,比管道到egrep更高效:find . -type f -name "*.exe" ! -path "*games_1*" ! -path "*rei*" ! -path "*games*" ! -path "*tor*" ! -path "*jogos*" ! -path "*mods*" ! -path "*text*" > 1 2>/dev/null这里的
! -path "*xxx*"就是告诉find跳过包含指定字符串的路径,最后2>/dev/null把所有错误信息(包括那些IO错误)扔掉。排查存储的根源问题
这些IO错误可不是小问题,容易导致数据丢失,建议你先手动尝试访问那些报错的路径,比如用cd ./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/2.bp.blogspot.com看看能不能进入,或者用ls查看内容,确认是不是真的无法读取。
如果是外部磁盘,可以重新插拔试试;如果是本地磁盘,建议用磁盘检测工具(比如smartctl查看磁盘健康状态),或者卸载分区后用fsck检查修复文件系统(注意执行fsck前一定要卸载对应的分区,不然会损坏数据)。检查输出文件的问题
你遇到的grep: write error: Input/output error也有可能是输出文件1所在的磁盘空间不足,或者路径没有写入权限。可以用df -h查看当前磁盘的剩余空间,用touch testfile试试能不能在当前目录创建文件,确认写入权限和空间是否正常。
备注:内容来源于stack exchange,提问作者Nuno Fonseca

