ファイルから文字列を検索し、見つかったら、ペアの名前を持つファイルが同じディレクトリにあることを確認します。

ファイルから文字列を検索し、見つかったら、ペアの名前を持つファイルが同じディレクトリにあることを確認します。

.ft1私は、特定の単語を含めることも含まない場合もある、同じエンディングを持つ多くの異なるファイルを持っていますspecial。その単語を含むファイルについて、そのディレクトリに.log異なるエンディングを持つ別のファイルがあることを確認したいと思います。

私が今まで得たものは次のとおりです。

find . -name "*.ft1" -exec grep -l "special" {} \; -execdir ls *log \;

lsただし、実行するたびにエラーが発生します。

ls: cannot access *log: No such file or directory

しかし、私は知るこのディレクトリにそのようなファイルがあります。また、アスタリスクをエスケープして式を作成しようとしましたが、-execdir ls \*log \;エラーが残っています。

私も見たことがあるこれ同様の質問ですが、現在これが私の問題を解決するのにどのように役立つのかわかりません。

どうすれば正しく動作させることができますか?.log見つかったファイルと同じ名前のファイルのみを一覧表示するソリューションのボーナスポイント.ft1

ベストアンサー1

問題は、globを解釈するためにシェルが必要であることです*.log。したがって、-execdirシェルを呼び出す必要があります。次のコードスニペットは、「同じ茎」の要件も解決します。

find . -name "*.ft1" -exec grep -l "special" {} \; \
-execdir bash -c 'x=$1; x=${x%.txt}; ls "$x".log' bash {} \;

おすすめ記事