我正在尝试列出位于我的bash脚本中目录的特定子目录中的所有文件。这是我试过的。
root_dir="/home/shaf/data/"
sub_dirs_prefixes=('ab' 'bp' 'cd' 'cn' 'll' 'mr' 'mb' 'nb' 'nh' 'nw' 'oh' 'st' 'wh')
ls "$root_dir"{$(IFS=,; echo "${sub_dirs_prefixes[*]}")}"rrc/"
请注意,我不想扩展存储在$root_dir
中的值,因为它可能包含空格,但我想扩展{}中包含的子路径,这是逗号分隔的内容字符串{{1 }}。我将子目录前缀存储在数组变量$sub_dirs_prefixes
中,因为我以后必须使用它们来做其他事情。
我收到以下错误:
$sub_dirs_prefixes
如果我在错误消息中复制路径并从命令行运行ls: cannot access /home/shaf/data/{ab,bp,cd,cn,ll,mr,mb,nb,nh,nw,oh,st,wh}rrc/
,它会显示列出的子目录的内容。
答案 0 :(得分:1)
您可以命令替换以生成扩展模式。
shopt -s extglob
ls "$root_dir"/$(IFS="|"; echo "@(${sub_dirs_prefixes[*]})rrc")
通过参数can命令替换已经完成,shell在执行路径名扩展之前就会看到这个:
ls "/home/shaf/data/"/@(ab|bp|cd|cn|ll|mr|mb|nb|nh|nw|oh|st|wh)rrc
@(...)
模式匹配其中一个前缀。
如果目录名的组件包含需要引用的字符,则会变得有点棘手,因为我们没有引用命令替换。