【问题标题】:Grep for keyword over multiple directories and move found files在多个目录中搜索关键字并移动找到的文件
【发布时间】:2013-07-07 19:39:37
【问题描述】:

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

【问题讨论】:

    标签: linux bash loops grep find


    【解决方案1】:

    试试

    for file in `grep -rl ...`
    

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

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

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

    【讨论】:

    • 所以只是为了澄清一下:我是否将grep -fl ... 代替* 在第一行“for file in?因为如果是这种情况,那么我会收到以下错误:grep: l : 没有这样的文件或目录
    • @user2566508:哎呀,错字了。应该是-rl
    • 我认为我现在遇到了空白问题,出现以下错误 grep: Untitled: No such file or directory grep: Document: No such file or directory grep: (copy): No such文件或目录
    • 是的,文件名中的空格很烦人。尝试将IFS=(将IFS 设置为空)放在for 之前的行中。它可能会改变其余代码的行为;如果是这样,请将其保存在另一个变量中,然后再将其恢复。我会在答案中编辑它...
    • 好的,所以我尝试了 - 但仍然没有得到我正在寻找的结果。我想过退后一步,从生成要移动到 txt 文件中的文件列表开始。我已经能够做到。我很欣赏这与我最初提出的不同 - 所以我很高兴坚持这个问题。也有可能相同的文件名将存在于多个文件中,我如何让它将文件复制到保持相同文件夹结构的新位置。对此的替代方案 - 我很乐意简单地将它 rm -f 匹配的文件并完成它。 :)
    【解决方案2】:

    试试这个:

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

    【讨论】:

    • Thx - xargs:不匹配的单引号;默认情况下,引号对 xargs 是特殊的,除非您使用 -0 选项。在运行此之前,我需要确保维护文件夹结构 - 因为有 1000 个文件中的 100 个,我不能确定没有重复的名称。
    • @Summo 抱歉,我不确定我是否理解您的问题。你有错误吗?
    • 我收到一条错误消息,告诉我在命令行中输入 -0。所以我添加了 -0 开关并运行了命令。我查看了文件夹,一些文件移动了过去,但它只是坐在那里 - 我假设它停止了,因为它没有移动到下一个文件夹。
    • @Summo 看起来你的文件有空格。抱歉,请使用更新后的命令。
    • xargs:不匹配的单引号;默认情况下,引号对 xargs 是特殊的,除非您使用 -0 选项这是我得到的错误 - 所以我添加了 -0,但它只是坐着,什么也不做......我把 -0 放在 {} 之后我也得到了如果我从文件实际所在的测试文件夹运行此错误,mv: cannot stat 'TEST/Doc1 Unclass test\nTEST/AnotherFolder/Sensitive - af\nTEST/AnotherFolder/Untitled Unclassified - af\nTEST/AnotherFolder/Unclassified - af\nTEST/Doc Unclas - test\nTEST/Hot Frog - test\n': 没有这样的文件或目录
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多