我正在尝试将 50 台打印机的设置从一台服务器复制到另一台服务器。命令:
lpadmin -p printer_name -v printer_ip -E
和一些更多的参数。
我将打印机名称放在一个文本文件中,将打印机 IP 放在另一个文本文件中。
Printername.txt 在单独的行中包含打印机名称
Printerip.txt 在不同的行中包含相同打印机的 IP
我想将这两个文件中的打印机名称和打印机 IP 作为参数传递给上述命令。
我知道如何对 1 个参数执行此操作,即通过在 cat 文件中使用 For i 来执行此操作,但我无法用两个文件执行此操作。
答案1
您可以使用粘贴从每个文件中各取一行:
paste Printername.txt Printerip.txt
然后使用awk
在其中插入选项参数:
paste Printername.txt Printerip.txt | awk '{print "-p", $1, "-v", $2, "-E ..."}'
最后xargs
使用它作为命令的参数:
paste Printername.txt Printerip.txt | awk '{print "-p", $1, "-v", $2, "-E ..."}' |
xargs -L1 lpadmin
-L1
让我们xargs
为每次运行命令使用一行输入。它将进行一些分割,因此-p
,打印机名称等作为单独的参数传递。这最适合打印机名称中不包含空格或其他特殊字符的情况。
或者,您可以使用sh
withxargs
将输入定位为参数:
paste -d '\n' Printername.txt Printerip.txt | xargs -d '\n' -n2 sh -c 'lpadmin -p "$1" -v "$2" -E ...' _
答案2
您可以使用join
连接这两个文件。那么也许xargs
,或者for i in …
。