【问题标题】:Formatting timestamp in bash for use in a file operation在 bash 中格式化时间戳以用于文件操作
【发布时间】:2017-11-22 18:28:27
【问题描述】:

当我尝试使用时间戳作为文件名的一部分时,我从 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
  1. 上面的结果是一个名为 20171122-12/15.log 的文件,所以我的逗号变成了正斜杠 = 不是我想要的。
  2. 我尝试(无济于事)使用以下方法转义冒号:

    日期=date -d "today" +"%Y%m%d-%H\:%M"

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

  3. 我使用双引号来确保引用中没有歧义,文件名中的冒号可能会发生这种情况。没修好。

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

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

  5. 最后,替换 .../${drive}/${dtl}" 并不能解决问题...

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

对于 John1024: 我确保日期正常工作,从日期 cmd 输出:

20171122-12:47

并在 bash 中报告:

+ dtl=20171122-12:50.log

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

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

  1. 问题是我正在查看文件夹的 Mac 没有正确显示输出。

ls在输出目录显示:

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

但是从我的 Mac 上看到的这个视图去掉了冒号

我将把它标记为已关闭,因为根本问题是 Mac AFP 显示不一致问题,而不是 bash 问题。请参阅:here 当我在 1984 年第一次开始使用冒号时,Mac OS 使用冒号作为路径分隔符。随着迁移到 OS X(现在是很久以前),情况发生了变化。 AFP 和 AFP 的第三方实现带有“YMMV”警告,这显然是我错过的一个。

非常感谢 John1024

【问题讨论】:

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

标签: bash date timestamp cp colon


【解决方案1】:

这里的问题是底层冒号在 AFP 上没有正确显示。

实际上,上面的代码确实按预期生成了冒号。请参阅here 了解有关 OS X(和之前版本)特性的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多