
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
このコマンドを学ぶ前にかなり長い間パイプを使用していましたが、これは確かにより良いアプローチです。このリンクで提供された実用的なコマンドが実際に起動するのに非常に役立つことがわかりました。grep
find
find
使用 find
日常業務で:http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/
答え3
-深さ+1を使用して、現在のフォルダの検索を削除できます。
find . -type f -name '*.c' -depth +1 -print