我的Red Hat服务器上有一个文件夹。来自各种扩展的500k文件。 这些文件的名称约定基于一个数字,例如:
我设计了一个查询,该查询生成了应删除的所有数字的列表。 假设我每天/每周将此列表导出到一个txt文件中,从列表中出现的文件夹中删除所有文件的最有效方法是什么?
在每个文件夹上运行for循环会花费太长时间,因为文件太多了。我设法使用以下命令生成要删除的所有数字的列表,其中包含此文件夹中的文件:
join <(cat list.txt | sort) <(ls /folder/with/0.5Mfiles | grep -v html$ | sed 's/[a-zA-Z.]*//g' | sort)
但是这样我丢失了原始文件名(例如z123456.jpg)
最有效的方法是什么?
答案 0 :(得分:0)
怎么样
while read -r number; do
echo rm /path/to/folder/*"$number"*
done < lists.txt
如果看起来没问题,请删除“echo”
是的,当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]
和[^0-9]*
添加“数字边界” - 前/后字符必须是非数字。因此?(*[^0-9])
匹配 空字符串或以非数字结尾的字符序列。