【问题标题】:Bash: epoch time stored in variable pass into date command and make folder nameBash:存储在变量中的纪元时间传递给日期命令并制作文件夹名称
【发布时间】: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 的回答对脚本进行了一些更改

【问题讨论】:

标签: bash date variables epoch mkdir


【解决方案1】:

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

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 格式。

    这对我有用

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2017-06-15
      • 2022-12-01
      • 2013-04-02
      • 2012-11-28
      • 2019-09-25
      相关资源
      最近更新 更多