ファイルを見つけてディレクトリパスのみを取得する

ファイルを見つけてディレクトリパスのみを取得する

ファイルを見つけて、grepファイル内の特定の文字列の式を見つけて、ファイルがある完全なディレクトリパスを取得しようとしています。

find `pwd` -iname '*.py' -type f -exec bash -c "grep -l 'nn'; sed 's[\/](.*)*[\/]/d' {}" \; 

ただし、このsed式を使用すると、ファイルを繰り返し印刷してディレクトリパスから削除するのではなく、端末がハングします。

これにより、部分的にこれを達成できます。

find `pwd` -iname 'nn*' -type d

ただし、これはファイル内の名前nnではなくディレクトリ名を持つことを期待しています。nn

ベストアンサー1

パスにファイル名を含めるには:

shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath

一致するファイルを含むディレクトリのみをインポートします。


```bash
shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath | xargs dirname

重複したディレクトリ名を削除するには:

shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath | xargs dirname | sort -u

ファイルが多いと、.py「パラメータリストが多すぎます」というエラーが発生する可能性があります。

この場合、 find を次のように使用します。

find `pwd` -iname '*.py' | xargs grep -l 'nn' | xargs dirname | sort -u

上記のすべては、パスに改行文字がないディレクトリを想定しています。パスに改行がある可能性がある場合は、コメントを追加してください。さらにソリューションを追加します。

おすすめ記事