【问题标题】:How to collect the files with specific keyword in their file names within a directory如何收集目录中文件名中带有特定关键字的文件
【发布时间】:2016-02-03 01:20:06
【问题描述】:

我有一个包含许多文件的目录。我的要求是,我必须根据特定关键字搜索文件名(不是文件数据)并打印该文件名。

例如

ABC 是目录。下面是文件

 AEXP/INC/ARP.txt
 AEXP/OPC/ARP.txt
 AEXP/INC/PQW.txt

我希望文件包含关键字INC

预期输出:

AEXP/INC/ARP.txt
AEXP/INC/PQW.txt

我试过这个逻辑,但它不能正常工作

#!/bin/sh

for FILE in ABC/* do
    if [[ $file =~ /INC/i ]] then
        echo success;
    else
        echo fail;
    fi
done

请帮助我得到正确的答案。 bash 脚本、Perl、正则表达式,什么都可以。

【问题讨论】:

  • 到目前为止您尝试了哪些方法,但它为什么不适合您?请学习How to Ask 好问题,如何创建minimal reproducible example,并在您访问该站点时获取该站点的tour,以了解Stack Overflow 的工作原理。
  • perl -E "say for glob 'ABC/*/INC/*.txt'"
  • 我试过这个逻辑,但它不能正常工作。 #!/bin/sh for FILE in ABC/* do if [[ $file =~ /INC/i ]] then echo success;否则回显失败;完成了
  • @Naveen.Y: 难道我的 Perl 命令没有做你想做的事吗?
  • @Borodin - 它工作完美,刚才我已经测试过了。非常感谢

标签: bash perl shell if-statement for-loop


【解决方案1】:

在 linux 上,您可以使用“查找”。在 Ubuntu shell 上,这看起来像:

find . -name "*INC*" -print

【讨论】:

  • 谢谢@sal 但我需要在特定目录上执行此操作。并且还需要自动化方法,因为我必须将此步骤添加到工作流程中。
  • 对。该命令可以在 bash 脚本中使用,如下所示:list=(find。 -name "get" -print) 然后你可以访问整个列表为${list[@]}等等...
  • 要访问特定目录,您只需在该步骤之前cd <desired directory>,或提供路径而不是“。”到find
  • 是的..明白了..非常感谢@sal
【解决方案2】:

这个怎么样:

cd ABC
ls -d */INC/*

是否有必要同时检查大写/小写变体?

【讨论】:

  • 是的.. 它正在按我的需要工作。非常感谢@user1934428
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 2020-01-03
相关资源
最近更新 更多