私は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
。引数を引用符で囲む習慣をつけることをお勧めします。
* 技術的には、どんなアイテムにもマッチしますが、ホームディレクトリにパイプ、ソケット、デバイスノードがある可能性は低いです。