非再帰的に「検索」を使用しますか?

非再帰的に「検索」を使用しますか?

/bin/find /root -name '*.csv'戻り値を使用してください。

/root/small_devices.csv
/root/locating/located_201606291341.csv
/root/locating/located_201606301411.csv
/root/locating/g_cache.csv
/root/locating/located_201606291747.csv
/root/locating/located_201607031511.csv
/root/locating/located_201606291746.csv
/root/locating/located_201607031510.csv
/root/locating/located_201606301412.csv
/root/locating/located_201606301415.csv
/root/locating/located_201607031512.csv

実際には、以下のすべてのファイルが望ましくないので、/root/locating/予想される出力はです/root/small_devices.csv

非再帰的に「検索」を使用する効率的な方法はありますか?

必要に応じてCentOSを使用します。

答え1

-maxdepthこれを行うには、次のオプションを使用できます。

/bin/find /root -maxdepth 1 -name '*.csv'

コメントで述べたように、-mindepth 1出力から開始点を除外するために追加されました。からman find

-最大深さレベル

始点を下回るほとんどのレベル(非負の整数)ディレクトリレベル。-maxdepth 0これは、テストとタスクが開始点自体にのみ適用されることを意味します。

- 最小深さレベル

レベル(負以外の整数)より低いレベルでは、テストや操作を適用しないでください。
-mindepth 1始点を除くすべてのファイルの処理を示します。

答え2

標準find:

find /root ! -path /root -prune -type f -name '*.csv'

これにより、検索からディレクトリ自体を除くすべてのディレクトリが/root削除(削除)されます。/root*.csv

GNUの使用find(および他のfind実装について-maxdepth):

find /root -maxdepth 1 -type f -name '*.csv'

パスを切り捨てるには/root/locating

find /root -path /root/locating -prune -o -type f -name '*.csv' -print

これで、/root特定のサブディレクトリを除くすべてのサブディレクトリが入力されます/root/locating

-maxdepthこのオプションを使用してこれを行うことはできません。

答え3

-maxdepth次の-mindepth基本色を使用できます。

find /root -maxdepth 1 -mindepth 1 -name '*.csv'

そしてFreeBSDfind-depth 1(macOSで使用)代わりに使用したいかもしれませんが、-maxdepth 1 -mindepth 1これは非効率的です。スティーブン・チャジェラス 以下のコメント、「1より大きい深さのディレクトリに降りるのをdepth 1やめません。」find-maxdepth 1牛に似た一種の栄養findサポートしていません。-depth n

関連情報