根据整数数组过滤文件列表?

use*_*558 2 bash array shell-script filenames

我有一个文件夹,里面有很多名为“ clip01234-randomlongstring.png ”的图片,其中01234是一个随机的五位数。我还有一个带有整数列表的数组“ clipnumbers ”。

现在我想创建一个列表“文件”,其中包含与“ clipnumbers ”数组中的数字匹配的所有文件名。我该怎么做?

结果输出应该是我可以以与我创建的当前列表(所有文件)相同的方式处理的内容: files=($(printf "%s\n" *.* | sort -V | tr '\n' ' '))

Kus*_*nda 6

在一个循环中:

shopt -s nullglob

files=()
for number in "${clipnumbers[@]}"; do
    printf -v pattern 'clip%s-*.png' "$number"
    files+=( $pattern )
done
Run Code Online (Sandbox Code Playgroud)

这会遍历数字并为每个数字创建一个文件名通配模式。扩展模式以将与其匹配的文件名添加到数组中files。该nullglob外壳选项使得非匹配模式扩大到什么(而不是保持未展开)。


使用find(递归到当前目录下的所有目录,并对每个找到的文件执行一些操作):

patterns=()
for number in "${clipnumbers[@]}"; do
    printf -v pattern 'clip%s-*.png' "$number"
    patterns+=( -o -name "$pattern" )
done

find . -type f \( "${patterns[@]:1}" \) -exec action-to-perform-on-files {} \;
Run Code Online (Sandbox Code Playgroud)

所述:1移除初始-o在从列表patterns中的扩展。

这将搜索文件与对其执行某些操作相结合。如果您的数组包含数千个数字(参数列表会变得太长),它将失败clipnumbers