単純な検索コマンドは実行されません

単純な検索コマンドは実行されません

私はLinuxの初心者ですが、現在次のコマンドを実行しようとしています。

find ~ -name apt.no

apt.noとしてリストされている別のディレクトリ内でを探していますmontrose-files

シェルからの応答はなく、新しい行が作成されるだけです。なぜ結果も生成されないのか、どなたか説明していただけませんか?

bbcharlieca@myvm:~$ find ~ -name apt.no
bbcharlieca@myvm:~$ █

ここに画像の説明を入力してください

答え1

コマンドは、ディレクトリ内およびその下のディレクトリ内で* と呼ばれるfind ~ -name apt.noファイルまたはディレクトリを検索します。( は自分のホーム ディレクトリを表します。)apt.no$HOME~

が自分のホーム ディレクトリ内にない限りmontrose-files、検索されず、対象ファイルは見つかりません。たとえば、がmontrose-files別のパスの下にある場合は、そのパスを指定する必要があります。

find /path/to/montrose-files -name 'apt.no' -print

montrose-files紛らわしいことに、以前にホーム ディレクトリにへのシンボリック リンクを作成した場合、findはデフォルトでシンボリック リンクをたどらないため、これも検索されません。この問題は、次の 2 つの方法のいずれかで解決できます。

find ~ -follow -name 'apt.no' -print
find ~/montrose-files/ -name 'apt.no' -print

最初のアプローチでは、シンボリック リンクfindに指示しますfollow。一部のバージョンでは、findシンボリック リンクがループ内を指している場合、構造を複数回走査することになる可能性があるため、このアプローチは適切ではない場合があります。

2 番目のアプローチでは、末尾にスラッシュを追加することで、シンボリック リンクを実際のディレクトリ ターゲットに解決するように強制します。

最後に、すべてのケースで、検索するファイル名を引用符で囲んでいることに注意してください。単純なケースでは違いはありませんが、ファイル名の不明な部分 (たとえば、apt.*) を一致させるためにワイルドカードを使い始める場合は、ワイルドカードがシェルによって処理されないように、単一引用符を使用する必要がありますfind。引数を引用符で囲む習慣をつけることをお勧めします。


* 技術的には、どんなアイテムにもマッチしますが、ホームディレクトリにパイプ、ソケット、デバイスノードがある可能性は低いです。

関連情報