使用 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 以非递归方式搜索目录中的特定文件。艾克斯的主要内容,如果未能解决你的问题,请参考以下文章