2008-08-20 17 views
17

私は自分のシステムにインストールされているシェルスクリプトファイルを探していますが、がうまくいかないことが判明:何も見つからないのはなぜですか**

$ find /usr -name *.sh 

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

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

なぜ仕事を見つけることができませんか?ワイルドカードを引用

+2

これはスーパーユーザの質問です? – endolith

+0

これは[UnixSE](http://unix.stackexchange.com/)のほうが適しています –

答えて

51

試してみてください。

$ find /usr -name \*.sh 

か:

$ find /usr -name '*.sh' 

あなたは現在の作業ディレクトリ内* .SHに一致するファイルを持っているために起こる場合は、ワイルドカードが展開されます見つける前にそれを見る。

のみtkConfig.shという名前のファイルを見つけるだろう
$ find /usr -name tkConfig.sh 

:あなたの作業ディレクトリにあるtkConfig.shという名前のファイルを持っているために起こる場合は、コマンドはに拡大する見つけます。あなたは* .SHに一致する複数のファイルを持っていた場合、あなたはを見つけるから構文エラーを取得したい:

再び
$ 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 

ワイルドカードを引用すると、ワイルドカードが引用符で囲まれているため、早期に展開されることはありません。

もう1つの可能性は、/ usrまたはそのサブディレクトリの1つがシンボリックリンクであることです。あなたは-followオプションが必要になる場合がありますので、通常は、リンクをたどりませんを見つける:(たとえば、Solarisの)いくつかのシステムでは

$ find /usr -follow -name '*.sh' 
+0

ファイルがシェルスクリプトですが、 '.sh'拡張子がない場合はどうなりますか?たぶん 'find/xyz | xargsファイル| grep shell'? –

+0

どのくらいの頻度でシェルスクリプトを実行しますか?**拡張子は.shですか? –

+0

ワイルドカードがいつ/どこで展開されているかを把握する一般的な方法はありますか? – isaacg

15

を追加する必要があるので、デフォルトのアクションがありません - 印刷コマンド。あなたのディスク上のファイルを見つけるための

find /usr -name '*.foo' -print 
+1

これまでに私はそれに少し慣れてきました。しかし、現代のSolarisボックスでは、-printがデフォルトでオンになっていることを指摘しておきます。実際には、私はそれ以上の方法では動作しない検索エンジンを見つけることはできません。 –

7

、代わりにその瞬時 ある「見つける」を使用するリーン(毎日構築されたインデックスに見えます) あなたが例は次のようになります。

locate '/usr*.sh' 
+0

素晴らしい提案です。 (私は何らかの理由で私のcrontabにそれを持っていないので、私のマシン上でupdatedbを実行しなければならなかった。最新のデータベースを持っていなければ、ロケートを使わない主な理由があるだろう) –

+0

そしてデフォルトではインストールされていないシステムがいくつかあります。私は 'mlocate'パッケージを自分のRaspberry Piにインストールしなければならないことを発見しました - 後で' sudo updatedb'を忘れずにインデックスを構築してください... – SlySven

関連する問題