Linux下批量保留指定目录含特定字符串的文件并删除其余文件
高效批量处理方案:一键清理所有Math目录中不含'pass'的文件
不用逐个钻进每个student的Math目录重复操作,直接在./class主目录下跑一条递归命令就能搞定,完美适配你的场景:
核心命令
find ./class -path "*/Math/*" -type f -print0 | xargs --null grep -Z -L 'pass' | xargs --null rm
命令拆解(帮你搞懂每一步的作用)
find ./class -path "*/Math/*" -type f:从./class根目录开始递归扫描,只筛选路径中包含/Math/的文件,精准命中所有student子目录下的Math文件夹内容,完全不会碰history、geography里的文件。-print0+xargs --null:专门处理文件名含空格、特殊字符的极端情况,避免命令执行时出错或误删文件。grep -Z -L 'pass':-L参数会列出不包含字符串'pass'的文件,-Z继续用null分隔符传递结果,保证和前后命令兼容。xargs --null rm:最终把所有筛选出来的不含'pass'的Math文件批量删除。
安全建议:先测试再执行
为了避免误操作,建议先把rm换成echo,预览一下将要被删除的文件列表,确认无误后再执行删除命令:
find ./class -path "*/Math/*" -type f -print0 | xargs --null grep -Z -L 'pass' | xargs --null echo
这样一套操作下来,100个student目录的Math文件夹一次性处理完毕,效率直接拉满!
内容的提问来源于stack exchange,提问作者code123
相关产品推荐
相关产品推荐

