我必须恢复邮件存档;数以千计的 .eml 文件。
我想运行一个“查找”命令,它将:
- 查找特定字符串
- 如果找到,请将文件复制到单独的文件夹中。
任何快速帮助将不胜感激!
我建议使用递归grep
以及xargs
:
grep "the string I want to find" -r --include=\*.eml -l -Z ROOTDIR | xargs -0 cp -t TARGETDIR
这将在目录.eml
下的所有文件中搜索ROOTDIR
所需的字符串并将它们移动到目录TARGETDIR
中。-Z
ingrep
和-0
inxargs
确保即使是带有古怪字符的文件名也能正常工作。
编辑:更改mv
为cp
我喜欢亚当的回答,但如果你想使用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