2012-11-12 35 views

回答

3

我建議使用遞歸grepxargs一起:

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

這將搜索所有.eml文件ROOTDIR目錄下所需字符串,並將其移動到該目錄TARGETDIR。 中的-Zxargs中的-0確保即使具有古怪字符的文件名仍能正常工作。

編輯:改變了mvcp

+0

尼斯和elegent;謝謝! – Disco

1

我喜歡亞當的答案,但如果你想使用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 
+0

不錯;但承認亞當的一個更優雅:)非常感謝你! – Disco

+2

這種解決方案的缺點是,您可以從2 * N到3 * N個獨立進程中任意分離,其中N是'.eml'文件的數量。如果有很多小文件,啓動和停止大量進程的開銷將不是微不足道的。但是,如果有少量大文件,則開銷將可以忽略不計。 –

相關問題