2016-10-27 5 views
0

処理したいディレクトリにいくつかのファイルがあります。各ファイルには、NAMEの値を設定するために使用する必要のある名前があります。各ファイルには、何かする必要のあるIPアドレスのリストがあります。Bash While Read

 #!/bin/bash 
    TMPDIR=/usr/customer/scripts/tmp 
    ip_targets(){ 
     OLD_IFS=$IFS 
     while IFS= read -r file_name; do 
      log "This is: $file_name" 
     done < "$(find "$TMPDIR" -regex '.*.vms$')" 
     IFS=$OLD_IFS 
    } 
    ip_targets 

私が実行している場合:

$find /usr/customer/scripts/tmp -regex '.*.vms$' 

私が取得:IPのリストを持っている

/usr/customer/scripts/tmp/XXX.vms 
/usr/customer/scripts/tmp/YYY.vms 

、それぞれが。私は、スクリプトを実行する場合

は私が取得:

$ bash -x tester.sh 
+ TMPDIR=/usr/customer/scripts/tmp 
+ ip_targets 
+ OLD_IFS=' 
' 
++ find /usr/customer/scripts/tmp -regex '.*.vms$' 
++ find /usr/customer/scripts/tmp -regex '.*.vms$' 
tester.sh: line 4: /usr/customer/scripts/tmp/XXX.vms 
/usr/customer/scripts/tmp/YYY.vms: No such file or directory 
+ IFS=' 
' 

は、まず私はパスなしでも拡張子を持つだけで、ファイルの名前を渡すことができるようにしたいと思います。

次のセクションを追加して、各ファイルの各IPにコマンドを発行できるようにしたいと考えています。

+0

を使用して、ファイル名(プロセス置換)と仮想ファイルを作成でしたあなただけの '猫の/のようなものによって行うことができますユーザー/顧客/スクリプト/ tmp/* .vms |あなたのループを猿にする必要はありませんか? – JNevill

+0

@JNevill - 私がしなければならない本当のことは単純ではないので、読んでいる間にそれを使う方法を実際に理解する必要があります。 – dross

+0

'while IFS ='を使っているので、 'OLD_IFS'は必要ありません。 –

答えて

1

ファイルのセットを長い文字列に追加しています。

< "$(find "$TMPDIR" -regex '.*.vms$')" 

ファイルをストリームする必要があります。これは

< <(cat $(find "$TMPDIR" -regex '.*.vms$')) 

EDIT あなたはファイル名ではなく、コンテンツをしたい場合は、

< <(find "$TMPDIR" -regex '.*.vms$') 
+0

これを試してみると、各ファイルの各行の内容が解析されます。最初に各ファイルの名前を解析する必要があります。 – dross

+0

申し訳ありませんが、私は私の答えを編集しました。 –

関連する問題