1

find コマンドを使用して、ホーム ディレクトリから RCS にチェックインされているすべてのファイルを検索しようとしています。これには、. などで終わるファイルが含まれますc,v。次のようなコマンドを実行すると

find . -name \*v 
find . -name \*c,v 

これは私が望む方法に近く、次のようなファイルが得られます

./LABTECH/RCSlab/trig/RCS/main.c,v

なんらかの理由で、RCS にない av または c,v で終わるランダムなファイルがコンピューターにある場合を除いて、これは素晴らしいことです。のようなもの find . -name \*RCS\*c,vは機能せず、何も返されません。find . -name RCS\*RCS ディレクトリを返しますが、RCS ディレクトリ内のファイルは返しません。

ホームディレクトリから始めて、RCSディレクトリにあるすべてのファイルを返すfindコマンドを取得できる方法はありますか。後で不要なファイルを除外できることはわかっていますが、最初は RCS ディレクトリのファイルのみを表示する必要があります。

すべての回答を読んだ後、教師がそのような質問をするためのスクリプトについては説明していないため、,v が RCS ファイルであると仮定することが最善の方法であると判断しました。質問のために xargs または grep にパイプすることも想定されていません。また、私のバージョンの UNIX では -path が機能しません。-name を使用すると '/' に一致しないことを perreal から知って助かりました。-path または何らかのタイプの次のコマンドまたはスクリプトなしではこれを行う方法がないことを理解しました。ご協力ありがとうございました。

4

4 に答える 4

1

これをやってみてください:

find . -path '*/RCS/*,v'

のバージョンにオプションがfindない-path場合は、次をテストできます。

find . -name '*,v' -print | grep -E 'RCS/[^/]+,v$'
于 2013-03-31T01:24:50.893 に答える
0

find マンページから:

-name pattern
       Because the leading directories are removed, the file names
       considered for a match with -name will never include a slash, 
       so `-name a/b' will never match anything (you probably need 
       to  use -path instead). 

したがって、スプートニックの回答の-path代わりにasを使用できます。-nameもう 1 つの方法は、まず関連するディレクトリを見つけることです。

find -name '*RCS' -type d | xargs -n1 -I{} find {} -name '*.c,v'
于 2013-03-31T01:26:00.880 に答える