使用迭代文件名/时间戳的while read循环输出



我正在尝试创建一个脚本,该脚本将对变量(这是一个完全限定的文件名)迭代地运行命令,并将该命令的结果输出到单独命名/带时间戳的文件(以%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作为文件名变量将重新打印完整路径,所以我需要某种方式来告诉循环"他们只是使用文件名作为变量而不是完整路径",但我不确定如何在这种情况下做到这一点。我也希望能够运行这个从任何位置,而不是特定的路径。

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

    如您所见,find返回的文件名包含完整路径。
  1. 你的find命令将返回所有文件目录名。

我们通过在输出文件名的$list上调用basename来解决#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

最新更新