如何将 find 命令的结果变量传递给 dd

如何将 find 命令的结果变量传递给 dd

我正在尝试dd通过传递 find 命令的结果变量来使用命令将 CentOS.iso 文件传输到 USB 闪存驱动器。

我想传递这样的变量

dd if=$isofile of=/dev/sdb

首先我需要创建一个合适的变量,所以我这样做

isofile='find ~ -iname "*centos*minimal*.iso"'

然而执行创建的变量的输出

$isofile

看起来不太乐观。我无法将其传递给dd if=命令。

终端窗口

这可以实现吗?将变量传递给if=

同样,是否可以将find命令的结果传递给并以此方式-exec dd {}传输文件?.iso

答案1

您使用了错误的转义命令。您使用单个引号字符发出的命令基本上将整个查找字符串定义为字母字符串。(您可以通过输入 echo $isofile 来查看)。您要执行的操作是执行此操作,然后将输出转换为变量。至少有两种方法可以做到这一点 -

您可能想要的方式是使用反引号而不是正引号,即

  isofile=`find /home/tomas -iname "*centos*minimal*.iso"`

或类似的、更现代的版本

  isofile=$( find /home/tomas -iname "*centos*minimal*.iso" )

以上两种方法都存在一个问题,即如果有多个文件匹配怎么办。您可以通过执行类似下面的操作来获取第一行,从而解决此问题。

 isofile=$( find /home/tomas -iname "*centos*minimal*.iso" | head -1 )

答案2

davidgo 的回答没有提到最后一部分。让我来。

是否可以将find命令的结果传递给并以此方式-exec dd {}传输文件?.iso

是的。你的第一个方法可能是:

find ~ -iname "*centos*minimal*.iso" -exec dd if={} of=/dev/sdb \;

dd但是,如果有多个匹配文件,这将连续运行多个。实际上,除了最后一个之外,其他所有dd操作都是浪费时间。为了确保find第一次成功dd使用后停止-quit

find ~ -iname "*centos*minimal*.iso" -exec dd if={} of=/dev/sdb \; -quit

注意-quitPOSIX 不要求它,您find可能会或可能不会支持它。

相关内容