我如何:在一堆文件中找到一个字符串,如果找到,则将文件复制过来

时间:2012-11-12 16:21:18

标签: linux file find

我必须恢复邮件存档;成千上万的.eml文件。

我想运行一个'find'命令:

  1. 寻找特定的字符串
  2. 如果找到,请将文件复制到单独的文件夹中。
  3. 任何快速帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

我建议使用递归grepxargs

grep "the string I want to find" -r --include=\*.eml -l -Z ROOTDIR | xargs -0 cp -t TARGETDIR

这将搜索.eml目录下的所有ROOTDIR文件以获取所需的字符串,并将它们移动到目录TARGETDIR-Z中的grep-0中的xargs可确保即使是具有古怪字符的文件名仍可正常使用。

修改:将mv更改为cp

答案 1 :(得分:1)

我喜欢Adam的答案,但是如果你想使用find,你可以做类似的事情

find DIR -name '*.eml' -exec sh process.sh {} \;

process.sh看起来像

SEARCH='Doe'
DEST='..'
s=$(grep "$SEARCH" "$1")
if [ "$s" != '' ] ; then
    cp "$1" "$DEST"
fi