使用迭代文件名/时间戳从读取循环输出

时间:2016-09-25 21:43:22

标签: bash vmware esxi

我正在尝试创建一个脚本,该脚本将针对变量(这是一个完全限定的文件名)迭代运行命令,并将该命令的结果输出到单独命名的/时间戳文件(达到%S精度)。我对这个东西不太好

这就是我的所作所为:

find /vmfs/volumes/unlistedpathname/unlistedfoldername |
while read list;do
    vmkfstools -D "$list" >> duringmigration_10mins_"$list".$(date +"%Y.%m.%d.%H.%M.%S");
done

我希望的输出类似于

duringmigration_10mins_blahblahblah.vmx.2016.09.25.21.26.35

当然它不起作用,我不确定如何解决它。我知道问题完全是$ list,因为filename变量将重新打印完整路径,所以我需要某种方式告诉循环"他们只是使用文件名作为变量而不是完整路径"但我不知道在这种情况下如何做到这一点。我也希望能够从任何非特定路径的位置运行它。

1 个答案:

答案 0 :(得分:2)

阻止您正在寻找的行为有两个问题:

  1. 如您所见,find返回的文件名包含完整路径。
  2. 您的find命令将返回所有文件目录名。
  3. 我们通过在输出文件名basename上调用$list来解决#1。

    我们通过在find命令中添加-type f来解决#2,只返回文件而不是目录。

    find /vmfs/volumes/unlistedpathname/unlistedfoldername -type f |
    while read list ; do
        vmkfstools -D "${list}" >> "duringmigration_10mins_$(basename "${list}").$(date +"%Y.%m.%d.%H.%M.%S")"
    done