![如何将 find 命令的结果变量传递给 dd](https://linux22.com/image/1561773/%E5%A6%82%E4%BD%95%E5%B0%86%20find%20%E5%91%BD%E4%BB%A4%E7%9A%84%E7%BB%93%E6%9E%9C%E5%8F%98%E9%87%8F%E4%BC%A0%E9%80%92%E7%BB%99%20dd.png)
我正在尝试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
注意-quit
POSIX 不要求它,您find
可能会或可能不会支持它。