2015-10-04 12 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]}