サブディレクトリでのみファイルを検索する

サブディレクトリでのみファイルを検索する

Cファイルを検索したいとしましょう。私のサブディレクトリでのみ検索するにはどうすればよいですか?

私は試しましたが、ls -R | egrep .c$これも.c現在のディレクトリのファイルを検索します。現在のディレクトリのファイルをフィルタリングし、サブディレクトリのファイルのみを考慮する方法は?

答え1

厳密に言えば、サブディレクトリに

ls */*.c

サブディレクトリのサブディレクトリ内で再帰的に

find */ -type f -name '*.c' -print

答え2

findもちろん、Tripleが言ったように、ファイルワイルドカード(アスタリスクの拡張など)を使用することはできますが、...そのコマンドは私を動かします。

コマンドを使用すると、目的のタスクfindを正確に知らせるために使用できる組み込みフラグがたくさんあるため、lsファイルワイルドカードを使用する理由はありません。そして多くの理由がありますいいえ到着例えば、ファイルグロービングは通常、隠されたファイルやディレクトリを無視します。 これは、名前がドットで始まるすべてのファイル、または名前がドットで始まるディレクトリ(またはディレクトリのサブディレクトリ)にあるファイルを意味します。無視されます。たぶんそれはあなたが望むものかもしれませんが、ファイルグロービングを使用すると、今のようにfind簡単かつ直接制御することはできません。

Findは仕事に適したツールです。必要なオプションは-mindepth次のとおりです。

find . -mindepth 2 -type f -iname '*.c'

このコマンドは、現在のディレクトリー内のディレクトリー.cまたはそれより下のレベルにある名前で終わるすべてのファイル(ディレクトリー以外のファイル、特殊ファイル以外のファイル)を検索します.C。 (この-inameフラグは大文字と小文字が無視されることを意味します。)

(これはシンボリックリンクをたどりません。通常は好きな方法ですが、man findこの動作を調整する方法を確認できます。)

ちなみに私もlsこのコマンドを学ぶ前にかなり長い間パイプを使用していましたが、これは確かにより良いアプローチです。このリンクで提供された実用的なコマンドが実際に起動するのに非常に役立つことがわかりました。grepfindfind使用 find日常業務で:http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/

答え3

-深さ+1を使用して、現在のフォルダの検索を削除できます。

find . -type f -name '*.c' -depth +1 -print

関連情報