运行 带有文件模式的命令

run a command with a file pattern

我有这个文件 patterns.txt

a
b
c
d
e

我想 运行 每个模式的特定命令,如下所示:

scp username@hostname:/name/a
scp username@hostname:/name/b
scp username@hostname:/name/c
scp username@hostname:/name/d
scp username@hostname:/name/e

我试过像这样使用 for 循环:

#!/bin/bash
cat pattern.txt
for i in $pattern.txt
do
scp username@hostname:/name/$i
done

但我没有工作

两种典型的方法是:

while read i; do 
scp username@hostname:/name/"$i"
done < patterns.txt

sed 's#^#username@hostname:/name/#' patterns.txt | xargs -L 1 scp 

请注意,我预计这两个都会失败,因为 scp 预计至少有 2 个参数。您希望第二个参数如何适合您 运行 的命令将改变您为此使用 xargs 的方式。

例如,如果你想执行scp username@hostname:/name/a .,你可以这样做:

sed 's#^#username@hostname:/name/#' patterns.txt |
xargs -L 1 -J % scp % . 

你也可以for i in $(cat patterns.txt),但你不应该这样做。