ToofanHasArrived
ToofanHasArrived

Reputation: 85

grep with multiple NOT and AND operators

I am looking for a multiple grep with NOT and AND conditions. I have a directory with with txt files and some csv files which have the date included in the filename. I want to delete the csv files that do not include today’s date. The directory does include csv files with previous dates. So I am trying the code below in 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

This is not deleting anything. If I take out the grep csv operator then it deletes the text files. Only the CSV files have dates on them, the text files don’t. Please advise.

Upvotes: 0

Views: 109

Answers (1)

Wintermute
Wintermute

Reputation: 44063

I suggest using the find utility for this:

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

If you want to do it with grep,

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

should also work.

EDIT: -delete in the find command instead of -exec rm '{}' \;. Thanks @amphetamachine.

Upvotes: 2

Related Questions