arrays - 如何将子目录列表存储到数组中并通过 Bash 中的索引访问它们?

标签 arrays bash

假设我们有一个目录名为“A”,有4个子目录(aa,bb,cc,dd),其中一些子目录还有子目录,所以假设如下图:

  A
      aa
           aaa
      bb
           bbb
           bbbb
      cc
      dd

我尝试在数组中列出子目录(aa,bb,cc,dd),然后在我的脚本中按数组编号使用它们。 我使用下面的脚本将 dd 复制到父目录:

while IFS= read -d '' file; do
    A+=( "$file" )
done < <(find . -type d -print0 | LC_ALL=C sort -z)

cp -r  `pwd`/${A[4]}"  `pwd`/..

但问题是脚本创建了所有子目录的数组,[aa aaa bb bbb bbbb cc dd] 所以 ${a[4]} = bbb 而不是 dd

知道如何修复它吗?

最佳答案

您可以使用 maxdepth 选项将 find 限制为仅查看顶级目录:

find . -type d -print0 -maxdepth 1 | LC_ALL=C sort -z

您可以使用 glob 以更简单的方式实现相同的目标:

dirs=(*/)             # store all top level directories into the dirs array
dirs=("${dirs[@]%/}") # strip trailing / from each element of the array

然后

cp -r  "$PWD/${dirs[4]}"  "$PWD/.."
  • 需要使用双引号来防止分词和通配符
  • 反引号中的
  • pwd可以简单地写成$PWD,不需要创建子shell

关于arrays - 如何将子目录列表存储到数组中并通过 Bash 中的索引访问它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44743595/

相关文章:

javascript - 生成时间戳日期范围之间的空数据 | JavaScript

bash - 苹果电脑 : Virtual Shell Bash Version does not Match Installed Version

ios - 如何从 JSON 数组 SwiftyJSON 获取数据?

Java 使用样本创建波形

linux - 运行 "-bash"后命令 "ps -aux |grep bash"是什么

bash - 如何在 crontab 中委托(delegate)使用另一个文件作为 crontab?在 SVN/CVS 中又名 Crontab?

用于检查正在运行的进程的 Bash 脚本

linux - RRD 不适用于 shell 脚本

c - 如何将每个句子存储为数组的元素?

c - 合并排序实现不起作用