【发布时间】: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
- 上面的结果是一个名为 20171122-12/15.log 的文件,所以我的逗号变成了正斜杠 = 不是我想要的。
-
我尝试(无济于事)使用以下方法转义冒号:
日期=
date -d "today" +"%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: 我确保日期正常工作,从日期 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
- 问题是我正在查看文件夹的 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