Linux Bash-如何正确列出文件夹中的文件并管理排除

Linux Bash-如何正确列出文件夹中的文件并管理排除,linux,bash,Linux,Bash,我正在寻找一种合适的方法来列出 所有文件名(不带扩展名) 匹配特定的扩展列表 递归地保存在特定文件夹中 有一些排除模式 然后将其导出到文件中 目前我正在做以下工作,工作正常: ls -R --ignore={"Sample","Sample.*","sample.*","*_sample.*","*.sample.*","*-sample.*","*.sample-*","*-sample-*","*trailer]*"} "$filesSource" | grep -E '\.mkv$|\

我正在寻找一种合适的方法来列出

  • 所有文件名(不带扩展名)
  • 匹配特定的扩展列表
  • 递归地保存在特定文件夹中
  • 有一些排除模式
然后将其导出到文件中

目前我正在做以下工作,工作正常:

ls -R --ignore={"Sample","Sample.*","sample.*","*_sample.*","*.sample.*","*-sample.*","*.sample-*","*-sample-*","*trailer]*"} "$filesSource" | grep -E '\.mkv$|\.mp4$|\.avi$' | sed -e 's/\(.*\)/\L\1/' | sort >> "$listFile"
感谢,我在这条线上有一个反馈,我不知道如何正确地做到这一点


谢谢你的帮助

为什么不试试find命令

差不多

找到你的路径-键入f-name“*.FIRST_EXTENSION”-o-name“*.SECOND_EXTENSION”| grep-v SOME_EXCLUSION | awk-f.{print$(NF-1)}”| sort>SOME_文件


注意:仅当文件名的扩展名仅包含1个“.”字符时,此操作才有效,否则您需要稍微修改awk部分。

如果您仅搜索文件名,则可以使用:

我将命令行拆分为多行:

$ find /path/to/folder -type f  \( \( -name '*.ext1' -or -name '*.ext2' -or -name '*.ext3' \) -and -not \( -name '*excl1*' -or -name 'excl2*' \) \) -print
这将有助于:

  • /path/to/folder
    :您正在搜索的文件夹
  • -键入f
    :您正在上述文件夹中搜索满足以下条件的文件:
  • \(
    :打开条件测试
  • \(-name'*.ext1'-或-name'*.ext2'-或-name'*.ext3'\)
    :谁拥有列出的三个扩展名之一(带有条件或)
  • -and-not\(-name'*excl1*'-或-name'excl2*')
    :如果上述条件匹配,它将检查(
    -and
    )其中一个模式
    *excl1*
    excl2*
    是否匹配
  • \)
    关闭主条件测试

  • -打印
    执行操作以打印找到的路径


它基本上是告诉您不要解析
ls
输出。这是一本很好的读物: