0

我有一个文件夹,我的 Red Hat 服务器大约有一个文件夹。来自各种扩展名的 500k 个文件。这些文件的命名约定基于一个数字,例如:

  • 一个123456 .csv
  • z 123456 .jpg
  • 123456.exe _
  • 234.jpg _ _
  • 第234

我设计了一个查询,它会生成一个包含所有应该删除的数字的列表。假设我每天/每周将此列表导出到 txt 文件中,从列表中出现的文件夹中删除所有文件的最有效方法是什么?

由于文件太多,在每个文件夹上运行 for 循环会花费很长时间。我设法使用以下方法生成了要删除的所有数字列表,这些数字在此文件夹中有文件:

join <(cat list.txt | sort) <(ls /folder/with/0.5Mfiles | grep -v html$ | sed 's/[a-zA-Z.]*//g' | sort)

但那样我会丢失原始文件名(例如z123456.jpg)

最有效的方法是什么?

4

1 回答 1

0

怎么样

while read -r number; do
    echo rm /path/to/folder/*"$number"*
done < lists.txt

如果看起来不错,请删除“回声”


number=1234的,什么时候模式会匹配a12345.jpg。让我们试试这个:

$ shopt -s extglob nullglob
$ touch 1234 a1234 1234b c1234d 12345 a12345 12345b c12345d
$ number=1234
$ echo ?(*[^0-9])"$number"?([^0-9]*)
1234 1234b a1234 c1234d

?(...)表单可以选择匹配包含的模式,我们使用*[^0-9]and[^0-9]*添加“数字边界”——前面/后面的字符必须是非数字。因此?(*[^0-9])匹配空字符串以非数字结尾的字符序列

于 2017-09-26T14:53:59.410 回答