使用迭代 filename/timestamp 从 while read 循环输出

output from while read loop using iterative filename/timestamp

我正在尝试创建一个脚本,该脚本将针对变量(这是一个完全限定的文件名)迭代 运行 一个命令,并将该命令的结果输出到一个单独的 named/timestamped 文件(到 %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 上,因为文件名变量会重新打印完整路径,所以我需要某种方式来告诉循环 "hey just use the filename as the variable NOT the full path" 但我不确定在这种情况下该怎么做。我也希望能够 运行 从任何位置而不是特定路径。

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

  1. 如您所见,由 find return编辑的文件名包括完整路径。
  2. 您的查找命令将return所有文件目录名称。

我们通过在输出文件名中的 $list 上调用 basename 来解决 #1。

我们通过将 -type f 添加到仅 return 文件而不是目录的查找命令来解决 #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