我正在寻找带有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文件有日期,文本文件没有。请指教。
答案 0 :(得分:2)
我建议使用find
实用程序:
find /var/tmp -maxdepth 1 -name '*.csv' ! -name "*$now*" -delete
如果你想用grep,
ls -1 /var/tmp/*.csv | grep -v "$now" | xargs rm -f
也应该有用。
在-delete
命令中编辑find
而不是-exec rm '{}' \;
。谢谢@amphetamachine。