我正在尝试创建一个脚本,该脚本将对变量(这是一个完全限定的文件名)迭代地运行命令,并将该命令的结果输出到单独命名/带时间戳的文件(以%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返回的文件名包含完整路径。
- 你的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