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

时间:2018-11-01 10:12:07

标签: linux bash

我正在寻找列出的正确方法

  • 所有文件名(不带扩展名)
  • 匹配特定的扩展名列表
  • 在特定文件夹中递归
  • 具有某些排除模式

,然后将其导出到文件。

当前,我正在执行正常工作的以下操作:

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"

感谢ShellChecker,我对此行有反馈,但我不知道该怎么做!

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

为什么不尝试查找命令?

类似

找到YOUR_PATH-类型f-名称“ * .FIRST_EXTENSION” -o-名称“ * .SECOND_EXTENSION” | grep -v SOME_EXCLUSION | awk -F '{print $(NF-1)}'|排序> SOME_FILE

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

答案 1 :(得分:0)

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

我将命令行分成多行:

$ 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:您正在搜索的文件夹
  • -type f:您正在上述文件夹中搜索满足以下条件的文件
  • \(:打开条件测试
  • \( -name '*.ext1' -or -name '*.ext2' -or -name '*.ext3' \):具有列出的三个扩展名之一(带有条件或)的人
  • -and -not \( -name '*excl1*' -or -name 'excl2*' \):如果满足上述条件,它将检查(-and)模式*excl1*excl2*中的一个是否匹配-not
  • li>
  • \)关闭主要条件测试

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