2

我对 bash 脚本有点陌生,并且无法找到我要问的答案,也就是说,如果可能的话。

我有一个文本文件,它是通过使用 grep 在目录中搜索包含“名称”的文件并输出以下内容而创建的,例如该文件名为 PathOutput.txt

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

/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

现在,如果可能的话,我想做的是使用命令循环文件,使用变量来引入文本文件中的每一行。但是我无法找到一种方法来对每一行再次运行命令。在我所有的游戏中,我确实得到了一个结果,它会在第一行运行一次,但这是当 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 回答