ファイルを見つけて、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
上記のすべては、パスに改行文字がないディレクトリを想定しています。パスに改行がある可能性がある場合は、コメントを追加してください。さらにソリューションを追加します。