2016-06-30 16 views
0

私は「実用的な」結果を得ています。私はそれをより効率的にし、プロセスを洗練したいと思っています。Bash:ループ出力から複数の配列を作成

#!/bin/bash 
varPATH+=($(find /usr/share/doc/nano/ -maxdepth 1 -type f -readable)) 
for i in ${varPATH[@]} ; do 
     md5sum $i | sed 's/\.\///g' 
done 

...出力...

3d4b12cf0073d9aeebbf29e661fd5da5 AUTHORS 
bf9b099648cb1200eb2fa4434c3c4547 BUGS.gz 
c7dcba1d8e5a6e0a88ced9929b2630ae changelog.Debian.gz 
d2b7963b6bcf44a590001e7c5b0ef8a8 changelog.gz 
e70e5c9b500efd2a540c999dceb8f06c copyright 
aa867595b2958564c4b32ed6ea591cd7 faq.html 
99724dc74c18b19a5433ac3624258e56 NEWS.gz 

私はmd5sumとARRAY1に追加することにしたいと:私は次のスクリプトを実行しています


は下に、私に従ってくださいarray2に追加するファイル名

両方の配列のシーケンスをループすると、それに応じてarray1 [22]とarray2 [22]が一致しますが、t o MD5ファイルを複数回。

私はこの結果を達成するための新しいスクリプトを作成しましたが、私は同じ結果を達成するために批判やより良い方法を得たいと考えています。この方法は「重い」か、必要以上に多くのプロセスを必要とするようです。

スクリプト:このメソッドは正気であることを示している

#!/bin/bash 
varPATH+=($(find /usr/share/doc/nano/ -maxdepth 1 -type f)) 
unset ar1; unset ar2; unset ar3; unset ar4; unset ar5 
bentest()  { 
       for i in ${varPATH[@]} ; do 
         md5sum $i | sed 's/\.\///g' 
       done 
       } 
ar1+=($(bentest)) 
count1=0 
count2=1 
while [ $count1 -lt ${#ar1[@]} ]; do 
     ar2+=($(echo ${ar1[$count1]})) 
     ar4+=($count1) 
     let count1+=2 
done 

while [ $count2 -lt ${#ar1[@]} ]; do 
     ar3+=($(echo ${ar1[$count2]})) 
     ar5+=($count2) 
     let count2+=2 
done 

count3=0 
count4=0 
count5=0 
while [ $count3 -lt ${#ar1[@]} ]; do 
     echo "ar1[$count3] = ${ar1[$count3]}" 
     let count3+=1 
done 
while [ $count4 -lt ${#ar2[@]} ]; do 
     echo "ar2[$count4] = ${ar2[$count4]}" 
     let count4+=1 
done 
while [ $count5 -lt ${#ar3[@]} ]; do 
     echo "ar3[$count5] = ${ar3[$count5]}" 
     let count5+=1 
done 

...出力...

ar1[0] = aa867595b2958564c4b32ed6ea591cd7 
ar1[1] = /usr/share/doc/nano/faq.html 
ar1[2] = e70e5c9b500efd2a540c999dceb8f06c 
ar1[3] = /usr/share/doc/nano/copyright 
ar1[4] = d2b7963b6bcf44a590001e7c5b0ef8a8 
ar1[5] = /usr/share/doc/nano/changelog.gz 
ar1[6] = 3d4b12cf0073d9aeebbf29e661fd5da5 
ar1[7] = /usr/share/doc/nano/AUTHORS 
ar1[8] = 9319db0df664b9fcfe6937b78666c607 
ar1[9] = /usr/share/doc/nano/UPGRADE.gz 
ar1[10] = 99724dc74c18b19a5433ac3624258e56 
ar1[11] = /usr/share/doc/nano/NEWS.gz 
ar1[12] = bf9b099648cb1200eb2fa4434c3c4547 
ar1[13] = /usr/share/doc/nano/BUGS.gz 
ar1[14] = 54cdb409a70b74d1a8b41a731e0d9ef5 
ar1[15] = /usr/share/doc/nano/THANKS 
ar1[16] = c7dcba1d8e5a6e0a88ced9929b2630ae 
ar1[17] = /usr/share/doc/nano/changelog.Debian.gz 
ar1[18] = 2864bac6c4e3e9264a8a68509e511e81 
ar1[19] = /usr/share/doc/nano/TODO.gz 
ar1[20] = a4ee8fd431a8db6cc84a7fb6c29931b9 
ar1[21] = /usr/share/doc/nano/README 
ar2[0] = aa867595b2958564c4b32ed6ea591cd7 
ar2[1] = e70e5c9b500efd2a540c999dceb8f06c 
ar2[2] = d2b7963b6bcf44a590001e7c5b0ef8a8 
ar2[3] = 3d4b12cf0073d9aeebbf29e661fd5da5 
ar2[4] = 9319db0df664b9fcfe6937b78666c607 
ar2[5] = 99724dc74c18b19a5433ac3624258e56 
ar2[6] = bf9b099648cb1200eb2fa4434c3c4547 
ar2[7] = 54cdb409a70b74d1a8b41a731e0d9ef5 
ar2[8] = c7dcba1d8e5a6e0a88ced9929b2630ae 
ar2[9] = 2864bac6c4e3e9264a8a68509e511e81 
ar2[10] = a4ee8fd431a8db6cc84a7fb6c29931b9 
ar3[0] = /usr/share/doc/nano/faq.html 
ar3[1] = /usr/share/doc/nano/copyright 
ar3[2] = /usr/share/doc/nano/changelog.gz 
ar3[3] = /usr/share/doc/nano/AUTHORS 
ar3[4] = /usr/share/doc/nano/UPGRADE.gz 
ar3[5] = /usr/share/doc/nano/NEWS.gz 
ar3[6] = /usr/share/doc/nano/BUGS.gz 
ar3[7] = /usr/share/doc/nano/THANKS 
ar3[8] = /usr/share/doc/nano/changelog.Debian.gz 
ar3[9] = /usr/share/doc/nano/TODO.gz 
ar3[10] = /usr/share/doc/nano/README 
+0

最終的な効果は何ですか? – Kusalananda

+0

私は、Apacheのファイル記述を自動的に生成するためにディレクトリに対して実行できるスクリプトを構築しています。 – spezticle

答えて

1

た元のスクリプトからの出力をループ私のために働いた簡単な方法ファイル名でハッシュコードを作成します。 -

#!/bin/bash 

md5sumArray=() 
nameArray=() 
while read -r md5sum name; 
do 
    md5sumArray+=("$md5sum") 
    nameArray+=("$name") 
done < <(find /usr/share/doc/nano/ -maxdepth 1 -type f -exec bash -c 'file={}; md5sum $file | sed "s/\.\///g"' \;) 

これでもう別のスクリプトは必要ありませんtを使用して、md5sumを含む配列に値を設定します。

あなたは、後で以下のようにそれらを印刷してお使いのアレイをテストすることができます: -

for element in "${md5sumArray[@]}" 
do 
    echo "$element" 
done 

for element in "${nameArray[@]}" 
do 
    echo "$element" 
done 

希望スクリプトは自明です。

+0

これはいいですが、答えのコードの先頭部分は、最初に作成したスクリプトのコードを尋ねます。 私のコードでは、 'for $ {varPATH [@]}; do md5sum $ i | sedさんの/////// g '; done' 3番目の配列を作成せずに、上記のコマンドを2つの配列に渡したいと思っています。 – spezticle

+0

@Benjamin:私の更新された答えを参照し、同じことについて提案してください。 – Inian

+0

これは素晴らしい、ありがとう。ファイル名がmd5sum $ file | sed "s/\.¥///g" 'であることを確認してください。 \;) ' 私はこのように多くのbashを使用していない、私はこれをもっと多く練習しなければならないだろう、ありがとう – spezticle

関連する問題