Bash脚本将目录/子目录中的所有文件加载到Array中

时间:2016-11-08 17:21:23

标签: arrays bash scripting

我正在尝试编写一个脚本,将带有路径的所有文件名加载到bash脚本中的数组中。

说我希望/ home / documents /中的所有文件夹和子文件夹的文件最后会给我一些文件。

我当前的脚本非常基本,但应该有一些功能。

num_partitions=0
for file in /home/documents/*; do
  date_partition[$num_partitions]=${file##*/}
  ((num_partitions++))
  echo ${date_partition} 
done

目前它只打印黑屏。如何修复它以获得我需要的功能并正确打印?

我是Bash的新手,这实际上是我的第一个剧本。请帮助。

1 个答案:

答案 0 :(得分:2)

首先,通常,您不想解析ls的输出... http://mywiki.wooledge.org/ParsingLs

接下来,你的方法的逻辑没有错。我们可以使用一种更简单的方法来完成这项任务!

ar=( $(find /home/documents/*) ); echo "${#ar[@]}"; echo "${ar[2]}"

我们打破了它。

$( find /home/documents/* )

这是命令替换。它捕获写入其中的命令的输出。有了这个,您可以执行类似output=$( find .)的操作,现在output是一个包含find命令结果的变量。

接下来我们有

ar=()

()创建一个数组。此数组的输入现在将是find命令的输出。因此,当我们将它们组合在一起时,我们最终会“从此find命令的输出中创建一个数组”。

命令的其余部分只显示ar实际上是一个数组。我们打印出数组的长度,然后打印索引2的值。

推荐谷歌搜索将是... bash中的命令替换。从bash中的命令创建数组。如何在bash中使用数组。

注意:请注意$( )中的命令可以包含|其他命令,例如find . | tr -d "." | ./some_other_command。另外我建议阅读自“。”以来查找的手册页。并且“..”可能会出现在您的数组中,因为它现在已经写好了。