17

システムにインストールされているシェル スクリプト ファイルを探していますが、検索が機能しません。

$ find /usr -name *.sh

しかし、そこにはたくさんのスクリプトがあることを私は知っています。例えば:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

なぜ仕事が見つからないのですか?

4

3 に答える 3

54

ワイルドカードを引用してみてください:

$ 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'
于 2008-08-20T21:04:01.003 に答える
15

一部のシステム (Solaris など) では、デフォルトのアクションがないため、-print コマンドを追加する必要があります。

find /usr -name '*.foo' -print
于 2008-08-20T21:05:08.847 に答える
8

ディスク上のファイルを見つけるには、代わりに「検索」を使用するようにしてください。これは瞬時に行われます (毎日構築されたインデックスを調べます)。例は次のようになります。

locate '/usr*.sh'
于 2009-01-24T23:28:27.497 に答える