我有一个包含模式列表的外部文件(每行模式)。
pattern1
foo bar
pattern_n
bar
bar foo
我想grep
所有文件,包括使用这些模式的子文件夹中的文件,如果模式匹配,则将文件复制到某些/ tmp / mybackup /然后将其删除。这样做的好方法是什么?
答案 0 :(得分:7)
如果我理解你的问题,你需要以下开关来grep:
-R
以递归方式扫描-l
仅打印匹配的文件名-f
从文件中读取模式-I
忽略二进制文件这样:
grep -RlIf patterns-file *
然后将此结果提供给其他实用程序以执行备份,例如xargs:
grep -RlIf patterns-file * | xargs -I {} mv {} /tmp/backup
或循环:
for afile in `grep -RlIf patterns-file *`; do
mv $afile /tmp/backup
done
答案 1 :(得分:1)
尝试
for x in `fgrep -f patternfile.txt -l -r .`; do cp $x /tmp/mybackup; rm $x; done