2016-11-08 10 views
0

パスを含むすべてのファイル名をbashスクリプトの配列にロードするスクリプトを作成しようとしています。ディレクトリ/サブディレクトリ内のすべてのファイルをアレイにロードするための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

まず第一に、一般的に、あなたはLSの出力を解析する必要はありません... http://mywiki.wooledge.org/ParsingLs

次に、あなたのアプローチの論理は間違っていません。このタスクを達成するために使用できる簡単な方法があります。

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

私たちはそれを打ち破っています。

$(find /home/documents/*) 

これはコマンド置換です。内部に書き込まれたコマンドの出力をキャプチャします。これでoutput=$(find .)のようなことができます。そして、出力はfindコマンドの結果を含む変数です。

次は

ar=() 

()は、配列を作成しています。この配列への入力は、今度はfindコマンドの出力になります。だから私たちは一緒に置くと、 "このfindコマンドの出力から配列を作成する"ことになります。

残りのコマンドは、実際にはarが配列であることを示しています。配列の長さを出力し、次にインデックス2の値を出力します。

推奨されるグーグルは、bashのコマンド置換になります。 bashでコマンドから配列を作る。 bashで配列を使う方法。 注:find . | tr -d "." | ./some_other_commandなどのコマンドに|を含めることができることを理解してください。のコマンドに|を含めることができます。find . | tr -d "." | ./some_other_commandまた、findのマニュアルページを読むことをお勧めします。 "と ".."が今書かれているようにあなたの配列に現れます。

+1

さらに単純です: 'arr =(/ home/documents/*)' - ファイル名パターンを配列に展開します。これは、空白を含むファイル名の場合は '$(find ...)'よりも安全です。 –

+0

良い点。私は非常に非常に彼らにスペースがあるファイルを扱う必要がないことに慣れています。しかし、必要がない場合は余分なツールを使用する理由はないという点が残っています。 –

関連する問題