使用 bash/aliases 删除目录中文件的最有效方法
Most efficient way to grep files in directories for deletion using bash/aliases
我有一个托管多个虚拟域和用户的 Debian 虚拟专用服务器。它的配置是为了托管多个域并在每个域名下有多个电子邮件地址(用户或帐户)。
我确实经常收到垃圾邮件,没有时间查看 SpamAssasin
如何根据电子邮件正文中的匹配字符串过滤某些电子邮件。
而是将以下函数添加到 .bash_aliases
中,并为快速访问使用别名
my_new_del() {
echo "0: "
for d in /home/vmail/*/ ; do
# echo "1: $d"
for f in "$d"info/*/*.some.file.pattern*;do
grep -i -H -l -s "" "$f" | while read -r line ; do
echo "rm -rf $line"
rm -rf $line
done
# echo "2: $f"
done
done
}
alias my_del=my_new_del
那我就用上面的别名:
my_del 'some string' &
该脚本可以完成这项工作,但它确实很慢,而且效率似乎很低。它循环遍历vmail目录中的每个子目录(每个子目录代表一个域名)。然后它循环遍历每个子目录中的文件,然后 greps 查找字符串 - 如果匹配则删除它。
能否以更有效的方式完成此操作?
您没有提供任何示例 input/output,因此这未经测试,但听起来您正在尝试这样做:
my_new_del() {
find /home/vmail -type f -name '*.some.file.pattern*' -exec grep -i -H -l -s "" {} + |
xargs rm -f {}
}
我假设您的文件名不包含任何白色 space,因为您现有的脚本依赖于该假设。
我有一个托管多个虚拟域和用户的 Debian 虚拟专用服务器。它的配置是为了托管多个域并在每个域名下有多个电子邮件地址(用户或帐户)。
我确实经常收到垃圾邮件,没有时间查看 SpamAssasin
如何根据电子邮件正文中的匹配字符串过滤某些电子邮件。
而是将以下函数添加到 .bash_aliases
中,并为快速访问使用别名
my_new_del() {
echo "0: "
for d in /home/vmail/*/ ; do
# echo "1: $d"
for f in "$d"info/*/*.some.file.pattern*;do
grep -i -H -l -s "" "$f" | while read -r line ; do
echo "rm -rf $line"
rm -rf $line
done
# echo "2: $f"
done
done
}
alias my_del=my_new_del
那我就用上面的别名:
my_del 'some string' &
该脚本可以完成这项工作,但它确实很慢,而且效率似乎很低。它循环遍历vmail目录中的每个子目录(每个子目录代表一个域名)。然后它循环遍历每个子目录中的文件,然后 greps 查找字符串 - 如果匹配则删除它。
能否以更有效的方式完成此操作?
您没有提供任何示例 input/output,因此这未经测试,但听起来您正在尝试这样做:
my_new_del() {
find /home/vmail -type f -name '*.some.file.pattern*' -exec grep -i -H -l -s "" {} + |
xargs rm -f {}
}
我假设您的文件名不包含任何白色 space,因为您现有的脚本依赖于该假设。