如何在 ls 中使用通配符来查找数字序列中缺少的文件?

Fre*_*edo 6 ls wildcards

我正在尝试在终端中按顺序列出丢失的文件。虽然这里存在许多答案,但它们不够通用,我设法根据我的情况进行调整。所以,如果你能做出一个足够通用的答案,对更多人有用,请去做。

我正在ls {369..422}.avi >/dev/null列出丢失的文件,但我不能使用 * 来匹配以 .avi 结尾的任何内容。我怎样才能做到这一点?

数字不在文件的末尾,而是在中间。所以我应该需要类似的东西*numbers*.avi

Kus*_*nda 8

ls *{369..422}*.avi >/dev/null
Run Code Online (Sandbox Code Playgroud)

这将首先生成像这样的模式

*369*.avi
*370*.avi
*371*.avi
*372*.avi
*373*.avi
*374*.avi
Run Code Online (Sandbox Code Playgroud)

通过大括号扩展,然后ls将使用这些模式执行,对于无法扩展到当前目录中的名称的每个模式,它都会给您一条错误消息。

或者,如果您*的名称中没有包含任何文件:

for name in *{369..422}*.avi; do
    case "$name" in 
        '*'*) printf '"%s" not matched\n' "$name" ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

这依赖于这样一个事实,即如果模式与当前目录中的名称不匹配,则该模式将保持未扩展状态。这为您提供了一种可能对丢失的文件做一些有用的事情的方法,而无需解析ls.