如何基于file1中的子串文件名匹配并指定待删除文件?
这需求很典型,我给你几个靠谱的实现方法,分步骤来,还能避免误删:
方法一:用while循环逐行处理(最直观,易调试)
首先得确保你的file1里每个要匹配的子串单独占一行。如果现在是用顿号分隔的(比如你给出的file123、file313、file355),先把它转换成每行一个的格式:
tr '、' '\n' < file1 > file1_clean
然后用循环读取每个子串,精准匹配并删除对应的文件:
while read -r pattern; do # 先执行echo命令验证要删除的文件列表,确认无误后再换成rm echo "准备删除:${pattern}.sam.out" # rm -f "${pattern}.sam.out" done < file1_clean
重要提示:一定要先运行带
echo的版本,确认输出的是你要删除的那三个文件(file123.sam.out、file313.sam.out、file355.sam.out),没问题再把echo那行注释掉,启用rm命令。
方法二:用xargs快速执行(更简洁)
如果已经把file1处理成每行一个子串的格式,也可以用xargs一次性完成操作:
# 同样先验证 xargs -I {} echo "准备删除:{}.sam.out" < file1 # 确认后执行删除 # xargs -I {} rm -f {}.sam.out < file1
通用扩展:如果子串不在文件名开头
要是以后遇到子串在文件名任意位置的情况(比如要删除包含355的所有.sam.out文件),可以把命令改成匹配任意位置的模式:
while read -r pattern; do rm -f *"${pattern}"*.sam.out done < file1
不过在你的场景里,子串都是文件名的前缀,所以用第一种精确匹配的方式更安全——能完美避开你要保留的file342455.sam.out和file34455.sam.out,不会误删。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

