私は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
それらを)。主張を引用する習慣を挙げることをお勧めします。
*技術的にはすべてのプロジェクトと一致しますが、ホームディレクトリにパイプ、ソケット、またはデバイスノードがある可能性はほとんどありません。