2012-03-29 9 views
0

Unixコマンドfindは私がやりたいことをしません。 find ../tmp -name "\*tmp\*"Unix findコマンドのpath引数にvariableをどのように使用できますか?

それが正しくtmpフォルダ

をして、その名前に "TMP" を含むファイルを出力しますが、私が入力したとき:

dir=../tmp #assign ../tmp as a variable named dir 

find ${dir} -name "\*tmp\*" 
は、ここで私が入力した場合、状況

です

出力はこう言っています:そのようなファイルやディレクトリはありません

私の推測では、コンマndは、変数 "dir"を探すファイルとして想定していますか? この問題を回避するにはどうすればよいですか? 私がこれを知りたい理由は、スクリプトの引数としてパスを渡すことができるようにするためです。 おかげ

-----------追加コメント

私はbashシェルを使用します。 混乱して申し訳ありません。上記のコードは動作します。実際の問題は、{}構造体を変数に組み込むときです。例えば、 は私が入力すると

DIR = ../{TMP1、TMP3} DIR

見つける$ {DIR} -name「* TMPという名前の変数として#assign ../{tmp1,tmp3} * "

出力には次のようなファイルやディレクトリがありません。 なぜですか?

+0

あなたが投稿した内容*は動作する必要があります。入力したコマンドの正確なリストと正確な結果を表示できますか?どちらのシェルを使用していますか? – FatalError

+1

あなたが入力したものが私のために働く。可変expension '$ {dir}'やリテラル文字列 '../ tmp'のどちらを使っても、まったく同じ出力が得られるはずです。どのように&2つのコマンドを呼び出すときに何か異なるものはないと確信していますか?どちらの場合も現在の作業ディレクトリは同じですか? – Celada

+1

あなたはどのシェルを使用していますか? tcsh? bash? ksh?おそらくbashですが、具体的にしてください。シェルによって、変数を割り当てる方法が異なります。 – ghoti

答えて

2

コマンドラインは、コマンドごとの最初にして(とプログラムを呼び出して、環境変数を設定するなど)何らかのアクションが実行され、評価されます。したがって、$ dirはコマンドラインが評価される前ではなく設定されます。この問題を解決するための一つの可能​​性は;

dir=../tmp ; find "$dir" -name "tmp" 

または二つの別々のライン(ティルヴァッルヴァルの答え)にコマンドを記述することにより、その使い方から変数の設定を分離することです。

dir=../tmp 
find "$dir" -name "tmp" 
1

これ行います:

を(コマンドラインから)

# dir="../tmp/whatever/your/directory" 
# find $dir -name "*tmp*" 
関連する問題