带有多个 NOT 和 AND 运算符的 grep

grep with multiple NOT and AND operators

我正在寻找具有 NOT 和 AND 条件的多重 grep。我有一个包含 txt 文件和一些 csv 文件的目录,这些文件的文件名中包含日期。我想删除不包含今天日期的 csv 文件。该目录确实包含具有以前日期的 csv 文件。所以我在 bash

中尝试下面的代码
#!/bin/bash
now=$(date "+%m-%d-%Y")
dir="/var/tmp/"
for f in "$dir"/*; do
   ls -1 | grep -v *$now* | grep *csv* | xargs rm -f
done

这并没有删除任何内容。如果我取出 grep csv 运算符,那么它会删除文本文件。只有 CSV 文件有日期,文本文件没有。请指教

我建议为此使用 find 实用程序:

find /var/tmp -maxdepth 1 -name '*.csv' ! -name "*$now*" -delete

如果你想用 grep 来做,

ls -1 /var/tmp/*.csv | grep -v "$now" | xargs rm -f

应该也可以。

编辑:find 命令中的 -delete 而不是 -exec rm '{}' \;。谢谢@amphetamachine。