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
输出。这是一本很好的读物: