在bash中格式化时间戳以用于文件操作

在bash中格式化时间戳以用于文件操作,bash,date,timestamp,cp,colon,Bash,Date,Timestamp,Cp,Colon,当我尝试使用时间戳作为文件名的一部分时,bash让我感到有些奇怪 #!/bin/bash DATE=`date -d "today" +"%Y%m%d-%H:%M"` dtl=$DATE.log for drive in $( ls /dev/disk/by-id | grep 'scsi-35' ); do mkdir -p /home/tt/drivelog/${drive} cp /home/tt/drivelog/currentset/$drive.log "/home/tt

当我尝试使用时间戳作为文件名的一部分时,bash让我感到有些奇怪

#!/bin/bash

DATE=`date -d "today" +"%Y%m%d-%H:%M"`
dtl=$DATE.log

for drive in $( ls /dev/disk/by-id | grep 'scsi-35' ); do
  mkdir -p /home/tt/drivelog/${drive}
  cp /home/tt/drivelog/currentset/$drive.log "/home/tt/drivelog/$drive/$dtl"
done
  • 上面的结果是一个名为20171122-12/15.log的文件,因此我的逗号变成了正斜杠=不是我想要的
  • 我尝试使用以下方法(无效)从结肠中逃出:

    日期=
    DATE-d“今天”+%Y%m%d-%H\:%m“

    这将生成一个名为20171122-12\/15.log的文件

  • 我使用双引号来确保引用中没有歧义,这可能发生在文件名中的冒号上。没修好

  • 当我尝试一些调试并只回显cp命令的源和目标部分时,它看起来是正确的。但是,当我在cp命令中将它们连接在一起时,这种常态就消失了。回波输出:

    /home/tt/drivelog/currentset/scsi-35000c50094vv123z.log
    /home/tt/drivelog/scsi-35000c50094vv123z/20171122-11:55。log

  • 最后,替换…/${drive}/${dtl}”并不能修复它

  • 非常感谢!(下图显示了最近的结果)

    对于John1024: 我确保date正常工作,date cmd的输出:

    20171122-12:47

    正如bash中所报道的:

    +dtl=20171122-12:50.日志

    使用bash运行脚本突出显示了以下问题: 1.命令工作正常

    +cp/home/tt/drivelog/currentset/scsi-35000c50094aa123z.log/home/tt/drivelog/scsi-35000c50094aa123z/20171122-12:50.log

  • 问题是我正在查看文件夹的Mac没有正确显示输出
  • 输出目录中的ls显示:

    20171122-11:58.log
    20171122-12 \:00.log
    20171122-12 \:27.log
    20171122-12 \:48.log
    20171122-12:50.日志

    然而,从我的Mac电脑上看到这一点时,却忽略了冒号

    我要将其标记为关闭,因为根本问题是Mac AFP显示不一致问题,而不是bash问题。请参阅:1984年我第一次使用冒号时,Mac OS使用冒号作为路径分隔符。随着迁移到OS X,这一点在亿万年前发生了变化。AFP和AFP的第三方实现都带有“YMMV”“注意事项,这显然是我错过的


    多亏了John1024,这里的问题是AFP上的结肠显示不正确


    实际上,上面的代码按预期生成冒号。有关OS X(及以前版本)特性的更多信息,请参见。

    在命令行中运行
    date-d“today”+%Y%m%d-%H:%m”
    ,并告诉我们您看到了什么。接下来,运行
    bash-xyourscript
    并向我们显示结果。@John1024,如果您愿意回答“我认为这是一个Mac APFS显示不一致的问题”,我将接受该答案,我们可以解决这个问题。谢谢。你做得很好,你解决了它。在StackOverflow上写下您自己问题的答案并接受它是一种非常好的形式。作为文档:APFS在这里并不是真正相关的,这是由于macOS API中的不一致性造成的。有些使用unix路径表示法(以“/”作为目录分隔符,文件名中允许“:”),有些使用旧的Mac OS表示法(以“:”作为分隔符,文件名中允许“/”)。因此,文件名中的哪个字符取决于用于访问(/list)它的API,而不是它所在的卷的类型。