1

我有一个包含多个文件夹和 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 小时里,我一直在寻找这样做的方法,但我根本无法弄清楚为什么整个文件夹也被移动了?

4

2 回答 2

0

尝试

for file in `grep -rl ...`

( -l)--files-with-matches只会打印文件名,因此您最终应该得到所有匹配的文件的集合,完全符合您的要求。

编辑:要处理空格,试试这个:

OLDIFS="$IFS"
FILES=`grep -rl ...`
IFS="$OLDIFS"
for file in $FILES
do
  ...
done
于 2013-07-10T01:39:05.550 回答
0

尝试这个:

grep -irl "key word" * | xargs -n1 -I{} mv {} /home/pdog/Downloads/testmv/
于 2013-07-10T03:12:05.550 回答