Bash:epoch时间存储在变量pass-into-date命令中,并生成文件夹名

Bash:epoch时间存储在变量pass-into-date命令中,并生成文件夹名,bash,date,variables,epoch,mkdir,Bash,Date,Variables,Epoch,Mkdir,我正在编写一个脚本,根据文件名中包含的历元时间创建子文件夹。 下面是一个示例文件名 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"

我正在编写一个脚本,根据文件名中包含的历元时间创建子文件夹。 下面是一个示例文件名

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的事情,比如
date-d
或unquoted
$epoch
,但我不知道我失败的原因是什么


编辑:我根据#tripleee的答案对脚本做了一些更改

在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

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

这是一个经过重构的版本,有以下更改:

  • 修理
  • 不要硬编码目录;只需在您喜欢的任何目录中运行它
  • 避免不必要地调用Awk来提取文件名部分
用于x英寸/*;做
历元=${x###*.}
tail=${x%“$epoch”}
name=${tail%\u*}
hrdate=$(日期-r“$epoch”+%Y-%m-%d)
mkdir-p“$name/$hrdate”
mv--“$x”$name/$hrdate”
完成

这是一个重构版本,有以下更改:

  • 修理
  • 不要硬编码目录;只需在您喜欢的任何目录中运行它
  • 避免不必要地调用Awk来提取文件名部分
用于x英寸/*;做
历元=${x###*.}
tail=${x%“$epoch”}
name=${tail%\u*}
hrdate=$(日期-r“$epoch”+%Y-%m-%d)
mkdir-p“$name/$hrdate”
mv--“$x”$name/$hrdate”
完成

我从
man
页面找到要使用的
--date
并添加了
@

hrdate=$(date +%F --date "@$epoch")
+%F
代表YYYY-MM-DD格式


这对我来说很有效

我从
man
页面找到了使用
--date
的方法,并添加了
@

hrdate=$(date +%F --date "@$epoch")
+%F
代表YYYY-MM-DD格式


这对我来说很有用

我在制作这个脚本时参考了这篇文章;我在制作这个脚本时参考了这个帖子;我也试过,但似乎没有效果。我也试过,但似乎没有效果。