Grep在多个目录上关键字并移动找到的文件

时间:2013-07-10 01:34:25

标签: linux bash loops grep find

我有一个包含多个文件夹和66GB文件的文件夹。 (.doc / .docx / .xls / .xlsx / .msg等。)

我需要一个循环命令,它将在文件正文和/或标题中的关键字的整个目录结构中递归搜索,然后将找到的文件移动到一个单独的位置。

我已尝试过此命令,它可以在单个文件夹上运行,但是当我将-r添加到grep命令时,它会抓取整个文件夹,因为其中一个文件包含关键字搜索匹配。

for file in *
do
  if grep -rq 'Pro*' "$file"
  then
    sudo mv "$file" /home/pdog/Downloads/testmv/
  fi
done

我一直在研究过去24小时内这样做的方法,我根本无法弄清楚为什么整个文件夹也会被移动?

2 个答案:

答案 0 :(得分:0)

尝试

for file in `grep -rl ...`

-l--files-with-matches)只打印文件名,因此您最终应该完全按照自己的意愿收集所有匹配的文件。

编辑:要处理空格,请尝试以下方法:

OLDIFS="$IFS"
FILES=`grep -rl ...`
IFS="$OLDIFS"
for file in $FILES
do
  ...
done

答案 1 :(得分:0)

试试这个:

grep -irl "key word" * | xargs -n1 -I{} mv {} /home/pdog/Downloads/testmv/