0

メールアーカイブを復元する必要があります。何千もの .eml ファイル。

次のことを行う単一の「検索」コマンドを実行したいと思います。

  1. 特定の文字列を探す
  2. 見つかった場合は、ファイルを別のフォルダーにコピーします。

迅速なヘルプをいただければ幸いです。

4

2 に答える 2

3

grepと一緒に再帰を使用することをお勧めしxargsます:

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

これにより、ディレクトリの下のすべての.emlファイルでROOTDIR目的の文字列が検索され、それらがディレクトリに移動されますTARGETDIR-Zingrep-0inにより、xargs風変わりな文字を含むファイル名でも適切に機能することが保証されます。

編集:をに変更しmvましたcp

于 2012-11-12T16:27:28.187 に答える
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
于 2012-11-12T16:38:18.190 に答える