我必須恢復郵件存檔;數千個.eml文件。我如何:在一堆文件中找到一個字符串,如果發現然後複製文件
我想運行一個單一的「查找」命令,將:
- 查找特定字符串
- 如果找到,將文件複製到一個單獨的文件夾。
任何快速幫助,將不勝感激!
我必須恢復郵件存檔;數千個.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
和xargs
中的-0
確保即使具有古怪字符的文件名仍能正常工作。
編輯:改變了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
不錯;但承認亞當的一個更優雅:)非常感謝你! – Disco
這種解決方案的缺點是,您可以從2 * N到3 * N個獨立進程中任意分離,其中N是'.eml'文件的數量。如果有很多小文件,啓動和停止大量進程的開銷將不是微不足道的。但是,如果有少量大文件,則開銷將可以忽略不計。 –
尼斯和elegent;謝謝! – Disco