web-dev-qa-db-ja.com

globで検索すると、grep -rもサブディレクトリを検索しないのはなぜですか?

-rを含むGrepが機能していませんでした。

その後、テスト状況を作成しました。ディレクトリ/home/den/backupには、Word washerを含むファイルが含まれるようになりました。また、/home/den/backup内にサブディレクトリを作成しました。そのディレクトリでは、ファイルにWord washerが含まれています。以下は、/home/den/backup/great.txt/home/den/backup/aaa/info.txtで2つのヒットを返すはずです。

私が発行する場合

grep -r "washer" /home/den/backup/*.*

結果は1ヒットです。

私が発行する場合

grep -r "washer" /home/den/backup/aaa/*.*

結果は1ヒットです。

最初のものは2番目のものも見つけてはいけませんか?

6
user628388

set -xを使用してシェルをデバッグモードに設定すると、ここで何が起こっているかを確認できます。

$ set -x
$ grep -r "washer" /home/steeldriver/backup/*.*
+ grep --color=auto -r washer /home/steeldriver/backup/great.txt
washer

つまり、シェルは*.*を展開し、単一ファイルgreat.txtに一致しているので、grepはその単一ファイルを検索します。

ディレクトリ全体を再帰的に検索する場合は、引数としてディレクトリを指定します。

$ grep -r "washer" /home/steeldriver/backup/
+ grep --color=auto -r washer /home/steeldriver/backup/
/home/steeldriver/backup/aaa/info.txt:washer
/home/steeldriver/backup/great.txt:washer

set +xを使用して、デバッグモードを再びオフにできます)

15
steeldriver