サブディレクトリから「ファイルの文字列」をgrepしてから、「フォルダ全体」をコピーします。

サブディレクトリから「ファイルの文字列」をgrepしてから、「フォルダ全体」をコピーします。

努力しています:

  1. 私はすべてのサブディレクトリ(約50個のフォルダ)にあるすべてのファイル(ファイル名:OUTCAR.txt)で「精度要求」文字列を探しています。

  2. 検索文字列を含むファイルを含むフォルダのみを別の場所にコピーする

現在私の解決策は次のとおりです。

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'

関連情報