Bash:存储在变量中的纪元时间传递给日期命令并制作文件夹名称
Posted
技术标签:
【中文标题】Bash:存储在变量中的纪元时间传递给日期命令并制作文件夹名称【英文标题】:Bash: epoch time stored in variable pass into date command and make folder name 【发布时间】:2021-03-25 22:50:15 【问题描述】:我正在编写一个脚本,该脚本根据文件名中包含的纪元时间创建子文件夹。 这是一个示例文件名;
movie_lotr_frodo_1608020500_1608020510
想要的输出;
frodo/2020-12-15/movie_lotr_frodo_1608020500_1608020510
这是我的脚本;
dir="/root/user/test"
cd "$dir"
for x in *; do
name=`echo $x | awk -F"_" 'print $3'`
epoch=`echo $x | awk -F"_" 'print $5'`
hrdate=$(date -r "$epoch" +%Y-%m-%d)
mkdir -p "$name/$hrdate"
mv -- "$x" "$name/$hrdate"
done
我得到了错误;
date: 1068020510: No such file or directory
它会创建 $name
文件夹,但不会创建 $hrdate
文件夹。用date -d
或未引用的$epoch
等日期尝试了几件事,但我不知道我在什么方面失败了。
编辑:我根据#tripleee 的回答对脚本进行了一些更改
【问题讨论】:
我在制作这个脚本时参考了这篇文章; unix.stackexchange.com/q/66494/434132 【参考方案1】:这是一个重构版本,有以下更改:
修复syntax error with the illegal space after=
不要对目录进行硬编码;只需在您喜欢的任何目录中运行它
避免不必要地调用 Awk 来提取文件名部分
Quote everything
for x in ./*; do
epoch=$x##*_
tail=$x%"_$epoch"
name=$tail%_*
hrdate=$(date -r "$epoch" +%Y-%m-%d)
mkdir -p "$name/$hrdate"
mv -- "$x" "$name/$hrdate"
done
【讨论】:
【参考方案2】:hrdate定义后面有个空格,应该是这样的:
dir="/root/user/test"
cd "$dir"
for x in *; do
name=`echo $x | awk -F"_" 'print $3'`
epoch=`echo $x | awk -F"_" 'print $5'`
hrdate=$(date -r "$epoch" +%Y-%m-%d)
mkdir -p $name/$hrdate
mv -- $x $name/$hrdate
done
【讨论】:
我也试过了,好像没有效果。【参考方案3】:我从man
页面找到使用--date
并添加@
。
hrdate=$(date +%F --date "@$epoch")
+%F
代表 YYYY-MM-DD 格式。
这对我有用
【讨论】:
以上是关于Bash:存储在变量中的纪元时间传递给日期命令并制作文件夹名称的主要内容,如果未能解决你的问题,请参考以下文章