努力しています:
私はすべてのサブディレクトリ(約50個のフォルダ)にあるすべてのファイル(ファイル名:OUTCAR.txt)で「精度要求」文字列を探しています。
検索文字列を含むファイルを含むフォルダのみを別の場所にコピーする
現在私の解決策は次のとおりです。
1. grep -r "required accuracy"
しかし、OUTCARというファイルからのみ検索したいと思います。それ以外の場合は、私のリストのフォルダに2つのファイルがあります。
2. grep -r "required accuracy" OUTCAR -exec scp -r {} ./final location
grepコマンドを使用して見つかったファイルのリストからフォルダのリストを抽出する方法がわかりません。たぶん、findコマンドを使用してファイル内の文字列を見つけることができますか?
答え1
find
利用可能な場合-execdir
:
find . -type f -name "OUTCAR.txt" \
-exec grep -q "required accuracy" {} \;
-execdir scp -r ./ "/path/to/final location" \;
-type f
()を含むすべてのファイルを見つけます-name OUTCAR.txt
。grep
本書の「必要な精度」については、grep
成功したら、scp
ファイルがあるディレクトリで...を実行します-execdir
。
これは絶対パスでなければなりません。/path/to/final/location
それ以外の場合。$PWD/relative/path/from/where/find/is/executed
答え2
この試み、
grep -lr 'required accuracy' rel1 | sed 's#/OUTCAR.txt##g' | xargs -I {} mv {} rel1_fin
-l
通常の出力を抑制します。代わりに、印刷は通常、各入力ファイルの名前を印刷します。最初の一致でスキャンが停止します。
答え3
私はこれが役に立つと思います:
grep -Rl "required accuracy" ./Source-dir/* | grep OUTCAR | xargs -I[] bash -c 'val="[]";scp -r ${val%/*} user@doman:/destination-direcory'