14

私はコマンド ラインのヘビー ユーザーでありfind、ビルド システム スクリプトでこのコマンドを頻繁に使用しています。ただし、Mac OS X では、集中していないときに、次のような出力が得られることがよくあります。

$ find -name \*.plist
find: illegal option -- n
find: illegal option -- a
find: illegal option -- m
find: illegal option -- e
find: *.plist: No such file or directory

基本的に、小さなドットを追加するのを忘れていました:

$ find . -name \*.plist

BSDfindではパスが必要ですが、GNUでは必要findないためです (指定しない場合は、現在のディレクトリと見なされます)。私は Linux、Mac OS X、Cygwin を同時に使用することが多いので、すべてのツールが同じように動作することは大きなメリットです。find忘れていたら「./」を追加するbash関数を書いてみたのですが失敗しました。ご協力いただきありがとうございます。:)

4

7 に答える 7

20

代わりに GNU find をインストールしてください。

$ brew install findutils
$ alias find=gfind

ええ、うまくいきます!

于 2013-02-21T13:26:58.937 に答える
11

find「正しく」使用するように自分自身を訓練できない場合は、システムコマンドの前に PATH のディレクトリにGNU find(から) をインストールしてみませんか。findutilsfind

cpリストの最後の項目がディレクトリでない場合、ファイルを現在のディレクトリにコピーする独自のプライベートバリアントを使用していました。私はそれを個人のbinディレクトリに何年も保管していましたが、機能を使用しなくなったため、最終的に削除しました。(私の 'cp.sh' は 1987 年に書かれ、1990 年と 1997 年の 2 回、バージョン管理システムの表記法の変更の一環として編集されました。1998 年頃に削除したと思います。スクリプトの主な問題は、cp file1 file2コピーの間があいまいであることです。ファイルを別のファイルの上に置き、2 つのファイルを現在のディレクトリにコピーします)。

に独自のラッパーを書くことを検討してくださいfind:

#!/bin/sh
[ ! -d "$1" ] && set -- . "$@"
exec /usr/bin/find "$@"

2行目は、「引数1がディレクトリでない場合は、コマンドライン引数を調整して、コマンドの残りの部分の前にドットを含めます。次のように入力すると混乱します。

~/bin/find /non-existent/directory -name '*.plist' -print

存在しないディレクトリはディレクトリではなく、スクリプトがコマンド ラインにドットを追加するためです。これが、プライベートcpコマンドの使用をやめた理由の 1 つです。

于 2008-10-12T00:14:57.733 に答える
6

それを「find」と呼ぶ必要がある場合は、次のものが必要です。

alias find=/usr/bin/find\ .

.profile または .bash_profile または …. Mac OSX の実際のパス (/usr/bin/find でない場合) に置き換えます。循環を避けるためにフル パスを入力します (bash は通常alias find=find問題なく解釈しますが、必ず確認してください)。

ただし、別名find(findl、myfind など) は付けない方がよいでしょう。別のシステムで試してみると、癖になってトラブルになるからです。

于 2008-10-11T22:41:40.497 に答える
4
find ./ -name "*.plist"

編集:うーん、私は質問を誤解したかもしれません! 気が狂っているなら、シェルスクリプトでエミュレートしてみませんか?私は定期的にランダムなユーティリティ スクリプトを ~/.bin に保存しています。これが PATH の最初の項目です。同様の設定があれば、おそらく次のようなことができます: (未テスト!)

#!/bin/sh
# remapping find!
CMD=`echo $1 | cut -c 1`
if [ $CMD = '-' ]
then
# pwd search
  /usr/bin/find ./ $*
else
# regular find
  /usr/bin/find $*
fi
于 2008-10-11T22:14:53.327 に答える
2

スクリプト (将来、あるシステムから別のシステムに移行される可能性が高い) を作成している場合は、"." を指定する、より具体的な形式のコマンドを使用することをお勧めします。デフォルトに頼る代わりに。同じ理由で、どこにもインストールされていないshスクリプトに依存するのではなく、スクリプトを作成することをお勧めします。bash

于 2008-10-11T22:18:10.933 に答える
1

次のリンクにあるコマンドを実行することをお勧めします: https://www.topbug.ne​​t /blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-バツ/

たとえば、パスに多くのコマンドを追加する必要がまったくないことがわかりました。

これは、システムにパッケージの Non-BSD find ユーティリティを使用させるfindutilsと同時に、必要な他のツールもインストールすることで問題を解決します。

于 2015-09-16T19:04:00.097 に答える
1

これはおそらくあなたが望むものではありませんが、どうですか:alias find="find ."

または新しい名前を選択します ( findlfind local?)

于 2008-10-11T22:17:17.783 に答える