使用/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
选项来执行此操作。