首页 > 解决方案 > 如何删除与字符串中的项目相似的文件

问题描述

我想使用以下模式删除当前文件夹中的文件。

0_something.sql.tar

我提供了一个包含数字的字符串

number_string="0,1,2,3,4"

如何删除 number_string 中未包含的任何文件,同时保持 x_x.sql.tar 模式?

例如,我有这些文件:

0_something.sql.tar
2_something.sql.tar
4_something.sql.tar
15_something.sql.tar

基于这个逻辑,以及数字字符串中的数字 - 我应该只删除 15 因为:

  1. 它遵循模式_ .sql.tar
  2. 数字字符串中没有数字

标签: linuxbash

解决方案


这可能会帮助你:

s="0,1,2,3,4"
s=",${s},"
for f in *.sql.tar; do
   n="${f%_*}"
   [ "${n//[0-9]}" ] && continue
   [ "$s" == "${s/,${n},/}" ] && echo rm -- "$f"
done

echo如果这个答案让你满意,请删除

这是做什么的:

  • 将您的 number_strings转换为完全以逗号分隔的字符串,并且以逗号 ( s=",0,1,2,3,") 开头和结尾。这允许我们搜索条目,例如,5,
  • 遍历所有与 glob 匹配的文件*.sql.tar
  • n="${f%_*}":提取第一个下划线之前的子字符串 `
  • [ "{n//[0-9]}" ] && continue验证子字符串是否为整数,如果不是,则跳过文件并移动到下一个。
  • 替换 number_string 中的数字(用逗号),如果子字符串没有改变,这意味着我们不应该保留文件

推荐阅读