Bash - 根据文件名将文件分成不同的数组

时间:2017-08-29 15:19:02

标签: arrays bash

我有一个音频文件夹。大多数是单个声音 - 或soundSprites - 而有些是几个soundSprites连接到精灵列表。这些spriteLists使用命名约定,并在文件名末尾添加_SL。如何创建两个soundSprites和spriteLists数组?我尝试使用find来排除精灵列表,如下所示:

soundSprites+=($(find . -maxdepth 1 ! -name "*_SL*"))

但是这会在我想避免的每个文件名之前添加./。而不是弄清楚如何迭代数组并删除每个./我只能假设有一个优雅的解决方案,我根本不知道。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

此处不要使用find;对于包含shell将用于分词或路径名生成的字符的文件名,这将失败。相反,使用模式 Designed 来生成路径名。

shopt -s extglob
soundSprites+=( !(*_SL*) )

答案 1 :(得分:0)

根据这个问题的最佳答案提供的信息: How can I use inverse or negative wildcards when pattern matching in a unix/linux shell? 你可以这样做:

    shopt  extglob
    soundSprites=(!(*_SL*))