使用 find 以非递归方式搜索目录中的特定文件。艾克斯

Posted

技术标签:

【中文标题】使用 find 以非递归方式搜索目录中的特定文件。艾克斯【英文标题】:Searching for particular files in a directory non-recursively using find. AIX 【发布时间】:2018-01-07 15:55:52 【问题描述】:

我有一个包含以下命令的脚本。我试图以这样的方式编辑它,它只搜索路径目录中的文件而不进入子目录。那不是递归搜索

find 路径 -name "cor*" -type f -exec ls -l \;

示例:该命令应仅提供 cor123.log 而不是 cor456.log。目前它同时提供了两个

<Path>
     ..cor123.log
    <directory>
      ..cor456.log

我尝试使用 -maxdepth,但 AIX 不支持它。 -prune 和 -depth 也没有帮助。

将不胜感激任何帮助。谢谢

【问题讨论】:

【参考方案1】:

迟到的答案,但可能会节省一些。在 aix 中

find /some/directory/* -prune -type f -name *.log

例如,让你的路径在最后一个正斜杠上加上通配符,然后是 -prune

/*

find /some/directory/* -prune -name "cor*" -type f -exec ls -l  \

经过测试。

【讨论】:

【参考方案2】:

您需要find 来仅选择文件吗? 当您知道所有以cor 开头的文件都是正则文件时,您可以使用ls -l $Path/cor*ls -l $Path/cor*.log

当您需要-type f时,您可以尝试过滤结果。 文件名不能有/,因此请删除路径后带有/ 的所有内容。 我们不知道 $Path 的最后一个字符。可以是/,这会使grep -Ev "$Path/.*/" 过滤器失效。在路径之后至少需要一个字符才能查找下一个/

find "$Path" -name "cor*" -type f 2>/dev/null| grep -Ev "$Path..*/" | xargs -ls

【讨论】:

【参考方案3】:

你可以使用

find . -name . -o -prune

以非递归方式查找文件和目录。

所以在你的情况下,这个可以工作:

find . -name . -o -prune -name 'cor*' -type f -exec ls -l  \;

【讨论】:

我试过了,还是不行。没有返回任何文件 您是否将点替换为您的实际路径?第一个示例是否适用于您的环境? 是的,我替换了点(find 之后的那个),但没有得到结果。第一个命令效果不佳。

以上是关于使用 find 以非递归方式搜索目录中的特定文件。艾克斯的主要内容,如果未能解决你的问题,请参考以下文章

以非交互方式执行 rgrep

linux-find递归搜索文件名

“查找:路径必须在表达式之前:”如何指定在当前目录中也可以找到文件的递归搜索?

Linux find 命令详解

递归搜索根目录和子文件夹中的文件[重复]

如何以非递归方式定义“原始”类型?