非递归地使用“查找”?

非递归地使用“查找”?

使用/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'

自由BSDfind(由 macOS 使用)您可能会想使用-depth 1代替-maxdepth 1 -mindepth 1,但这效率很低,因为斯蒂芬·查泽拉斯 下面评论depth 1“不会停止find下降到深度大于 1 的目录”,就像 一样-maxdepth 1GNUfind不支持。-depth n

相关内容