它想知道是否可以从任何财产获取快照的名称。
例如,我创建了一个名为:uuid
的属性,其值为c98fdd32-8a76-4bcf-a509-d298291f85f5
如果可以使用属性及其值来获取此快照的名称?
答案 0 :(得分:2)
是的,这是可能的。
使用zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 == "c98fdd32-8a76-4bcf-a509-d298291f85f5") print $1}'
您可以查询任何数据集(文件系统,卷或快照)的任何ZFS属性:
zfs get :uuid <dataset>
如果您在没有数据集的情况下使用-r
递归调用它,您将获得所有有效数据集:
zfs get -r :uuid
要将其仅限制为快照类型的数据集,请使用-t
:
zfs get -r -t snapshot :uuid
然后,您只能使用-o
显示所需的列,在本例中为名称和值列:
zfs get -r -t snapshot -o name,value :uuid
要进一步处理数据,您需要使用-H
删除标题,并使用-p
将数字显示为完全值:
zfs get -Hpr -t snapshot -o name,value :uuid
这包括所有值,甚至是未设置的值(-
),因此您需要进一步过滤输出(例如使用awk
):
如果您只想要一个特定的快照名称(打印第二列/值为特定字符串的每一行的每一个第一列/名称):
zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 == "c98fdd32-8a76-4bcf-a509-d298291f85f5") print $1}'
如果您想要除空的所有结果(所有结果都没有-
):
zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 != "-") print $1}'
如果您只想拥有基本名称,则可以进一步将第一列和第二列拆分为@
(这是文件系统和快照名称之间的分隔符):
zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 != "-") print $1}' | awk -F"@" '{print $1}'