システムにインストールされているシェル スクリプト ファイルを探していますが、検索が機能しません。
$ find /usr -name *.sh
しかし、そこにはたくさんのスクリプトがあることを私は知っています。例えば:
$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh
/usr/local/lib/tkConfig.sh
なぜ仕事が見つからないのですか?
ワイルドカードを引用してみてください:
$ find /usr -name \*.sh
また:
$ find /usr -name '*.sh'
現在の作業ディレクトリに*.shに一致するファイルがある場合、ワイルドカードは find がそれを認識する前に展開されます。作業ディレクトリに tkConfig.sh という名前のファイルがある場合、findコマンドは次のように展開されます。
$ find /usr -name tkConfig.sh
tkConfig.sh という名前のファイルのみが検索されます。*.shに一致するファイルが複数ある場合、 findから構文エラーが発生します。
$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list
繰り返しますが、その理由は、ワイルドカードが両方のファイルに展開されるためです。
$ find /usr -name tclConfig.sh tkConfig.sh
ワイルドカードを引用符で囲むと、ワイルドカードが時期尚早に展開されるのを防ぎます。
/usr またはそのサブディレクトリの 1 つがシンボリック リンクである可能性もあります。 通常、 findはリンクをたどらないため、-followオプションが必要になる場合があります。
$ find /usr -follow -name '*.sh'
一部のシステム (Solaris など) では、デフォルトのアクションがないため、-print コマンドを追加する必要があります。
find /usr -name '*.foo' -print
ディスク上のファイルを見つけるには、代わりに「検索」を使用するようにしてください。これは瞬時に行われます (毎日構築されたインデックスを調べます)。例は次のようになります。
locate '/usr*.sh'