首页 > 解决方案 > OpenSuse Linux 通过文件名中的字符串查找文件

问题描述

在 Linux OpenSuse 中,我想搜索文件名中包含字符串的文件

它应该搜索的路径: /var/spool/asterisk/monitorDONE

在 monitorDONE 下有子文件夹(MP3、OGG、ORIG、GSM、FTP ...),因此文件位于这些文件夹之一下,但不确定是哪一个

文件类型未定义,因为它可能是 .mp3 .wav .gsm 或任何其他音频文件

文件名是这样的00000000-000000_7857565221_0000.xxx

零是任何数字,xxx 是字母

现在命令应该如何?我在互联网上找到了一些 find 命令的示例,但在这种情况下非常具体,任何人都可以完成此命令以满足搜索条件吗?

find -type f /var/spool/asterisk/monitorDONE

谢谢

标签: linuxfindopensuse

解决方案


find /var/spool/asterisk/monitor -type f -name '*-*_*_*.*' -print | \
  grep -E '[[:digit:]]+-[[:digit:]]+_[[:digit:]]+_[[:digit:]]+.[[:alpha:]]+' | xargs fgrep -l DONE

Find 在它支持的通配符中有些限制,因此我们通过 grep 管道输出以查找精确的文件名匹配。如果位数是常数,则将“+”替换为“{x}”,其中 x 是位数。通过 grep 过滤后,文件列表作为参数转储到 fgrep,fgrep 输出包含字符串 DONE 的任何文件的名称。可以使用 grep 代替 fgrep,但 fgrep 更快,除非需要正则表达式。例如,如果位数始终相同,则替换 [[:digit:]]+[[:digit:]]{8}如果始终为 8 个数字。[[:digit:]]相当于[0-9]


推荐阅读