2

私は bash スクリプトに少し慣れていないので、私が尋ねようとしていることに対する答えを見つけることができませんでした。

「名前」を含むファイルをgrepを使用してディレクトリを検索して作成されたテキストファイルがあり、以下を出力します。ファイルはPathOutput.txtと呼ばれます

/mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/4c3483af-b41a-4979-98b7-6f6a4f147670/4c3483af-b41a-4979-98b7-6f6a4f147670.ovf

/mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/5b5538a5-423f-4eaf-9678-d377a6706c58/5b5538a5-423f-4eaf-9678-d377a6706c58.ovf

/mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/0e2d1451-45cc-456e-846d-d174515a60dd/0e2d1451-45cc-456e-846d-d174515a60dd.ovf

/mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/daaf622e-e035-4c1b-a6d7-8ee209c4ded6/daaf622e-e035-4c1b-a6d7-8ee209c4ded6.ovf

/mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/48f52ab9-64df-4b1e-9c35-c024ae2a64c4/48f52ab9-64df-4b1e-9c35-c024ae2a64c4.ovf

可能であれば、コマンドを使用してファイルをループし、変数を使用してテキスト ファイルの各行を取り込みます。しかし、各行に対してコマンドを実行する方法がわかりません。いろいろ試してみた結果、最初の行に対して 1 回実行される結果が得られましたが、これは grep の出力が別のコマンドにパイプされたときでした。

現時点では、bash スクリプトで PathOutput.txt へのパスを抽出し、cat でパスを表示し、必要なパスを read -p コマンドにコピーして、コマンドに対して実行する変数を作成しています。現在は問題なく動作しています。パスごとに毎回スクリプトを実行するだけです。コマンドで各行をループすることができれば、結果を txt ファイルに出力できます。

出来ますか?

4

2 に答える 2

4

使用できますxargs

$ xargs -n1 echo "arg:" < file
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/4c3483af-b41a-4979-98b7-6f6a4f147670/4c3483af-b41a-4979-98b7-6f6a4f147670.ovf
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/5b5538a5-423f-4eaf-9678-d377a6706c58/5b5538a5-423f-4eaf-9678-d377a6706c58.ovf
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/0e2d1451-45cc-456e-846d-d174515a60dd/0e2d1451-45cc-456e-846d-d174515a60dd.ovf
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/daaf622e-e035-4c1b-a6d7-8ee209c4ded6/daaf622e-e035-4c1b-a6d7-8ee209c4ded6.ovf
arg: /mnt/volnfs3rvdata/4007dc45-477a-45b2-9c28-43bc5bbb4f9f/master/vms/48f52ab9-64df-4b1e-9c35-c024ae2a64c4/48f52ab9-64df-4b1e-9c35-c024ae2a64c4.ovf

echo "arg:"実際に使用したいコマンドに置き換えるだけです。すべてのファイルを一度に渡したい場合は、-n1オプションをドロップします。

于 2013-02-19T13:32:40.437 に答える
2

私が正しく理解していれば、次のようなものが必要になる場合があります。

for L in `cat PathOutput.txt`; do
    echo "I read line $L from PathOutput.txt"
    # do something useful with $L
done
于 2013-02-19T10:51:04.887 に答える