2015-10-04 14 views
0

假设你没有在bash shell脚本简单的东西是这样的:而针对卷的根目录配料一个bash阵列在另一个阵列任意号码和店铺结果

folders=$(find "$1" -type d) 

与文件夹的100,000s十万并且你想对他们执行某种形式的操作,但是以批处理方式。

如果不枚举大量代码,是否有可能将一个数组批量化为一个数组数组,每个数组由10个或其他数组组成 - 或者最后一个数组可能更少?

感谢, 李

编辑为赛勒斯

folders=('/Volume/Data/1'. '/Volumes/Data/1', '/Volumes/Data/1/A', 'Volumes/Data/1/B', '/Volumes/Data/1/C') 

成批的版本的基础上一批网站,如果TWI(语法是完全不正确的和不支持的,我是一个总的BASH小白):

foldersBatched=(('/Volume/Data/1', '/Volumes/Data1/1'), ('/Volumes/Data/1/A', 'Volumes/Data/1/B'), ('/Volumes/Data/1/C')) 
+0

请为样本输入添加样本输入和您想要的输出到您的问题。 – Cyrus

+0

首先,你不应该'folders = $(找到“$ 1”-type d)',因为这个变量是不可用的(在带有换行符的文件名的情况下)。有可能有一个更好的方法来进行。你想用这些目录做什么? –

+0

请你再解释@ gniourf-gniourf,因为我处理的目录不是文件名。谢谢。 –

回答

0

bash不支持多维数组。

+0

'对于我在$(find ...)''在文件名为空格或水平字符的情况下被破坏! –

+0

好吧,如果你唯一的目的是传播坏习惯和破码,你最好离开。但你如何从我们那里学习?我实际上告诉过你 - 为什么你的代码被破坏了(我不是骚扰,而是我正在解释)。现在_这是几乎所有操作系统的通用代码,我希望它不是,否则几乎每个操作系统都会被破坏。 [这里有一个很好的链接,解释了为什么你不应该解析'ls',它也提到为什么'我在$(find ...)'是坏的](http://mywiki.wooledge.org/ParsingLs)。 –

+0

感谢您的链接@gniourf_gniourf。其目的是通过ExpanDrive将大量文件和文件夹(太字节数据)从本地存储移动到云端(将云服务安装为驱动器)。 ExpanDrive存在的问题是在操作系统驱动器上缓存传输,并通过在该驱动器上只剩下1.24GB空闲空间来降低整个系统的性能。尽管拥有对称的千兆位,但它无法足够快地移动文件。所以我的想法是将批量发送到云,保持checknig /睡眠,直到批量上传(即缓存文件夹为空),然后发送下一批。 –

0
#!/bin/bash 

folders=$(find $1 -type d) 

#associative memory 
typeset -A Tab 
#max col 
iMaxCol=10 

iLg=0 
iCol=0 
for fold in ${folders} 
do 
Tab[${iLg}_${iCol}]=${fold} 
iCol=$((iCol + 1)) 
if [ ${iCol} -eq ${iMaxCol} ] ; then 
    iLg=$((iLg + 1)) 
    iCol=0 
fi 
done 

#Like Tab[0][0] 
echo ${Tab[0_0]} 
#Like Tab[0][9] 
echo ${Tab[0_9]} 
#Like Tab[1][5] 
echo ${Tab[1_5]}