【问题标题】:Renaming files/dir's from one date format to another将文件/目录从一种日期格式重命名为另一种日期格式
【发布时间】:2017-10-29 04:46:06
【问题描述】:

所以我是一个编码新手,并且有一段时间想编辑我相当广泛的现场音乐库的格式。我环顾了这里和其他各种资源以到达我所在的位置,但我遇到了障碍。我有以下方式命名的目录:

  • 02.10.90 | 23 East Caberet - 阿德莫尔,宾夕法尼亚
  • 02.16.90 |天堂 - 马萨诸塞州波士顿

我想将它们简单地重命名为

  • 1990-02-10 | 23 East Caberet - 阿德莫尔,宾夕法尼亚
  • 1990-02-16 |天堂 - 马萨诸塞州波士顿

我已经能够使用以下方法正确重命名日期:

ls -1 | grep 90 |  awk '{print $1}' | awk  -F. '{printf "%s-%s-%s\n", "19"$3,$1,$2}' > list1.txt

然后使用

提取名称的其余部分
ls -1 | grep 90 | awk '{first = $1; $1 = ""; print $0}'>list2.txt

所以,我有一个从 1990 年到 2004 年的目录列表,我想将其应用于(它们都在不同的子目录中,所以我不介意手动更改“grep 90”。但是,从我生成的两个单独的列表,我不知道如何让它遍历每一行并打印“mv original_name list1.txt+list2.txt”,这样它就会显示:

mv 02.10.90 | 23 East Caberet - Ardmore, PA 1990-02-10 | 23 East Caberet - Ardmore, PA

我浏览了许多以前的帖子,但无法弄清楚最后一点 - 或者更好的是,一个更优雅的解决方案!任何帮助都非常感谢,在此先感谢您!

【问题讨论】:

    标签: date awk terminal grep rename


    【解决方案1】:

    不要解析来自ls 的输出,谷歌为什么,你在使用 awk 时不需要 grep,也不需要 awk 命令链,但对于这个任务,你不会使用任何无论如何,这些命令。

    查找文件的 UNIX 命令命名为 find,所以从它开始。这将找到名称以给定 globbing 模式开头的所有目录:

    find . -type d -name '[0-9][0-9].[0-9][0-9].90 *'
    

    现在您已经找到了需要对其进行处理的文件。对于您的需求,恕我直言,最简单的方法是最好的,那就是:

    find . -type d -name '[0-9][0-9].[0-9][0-9].90 *' -print0 |
    while IFS= read -r -d '' old; do
        path="$(dirname "$old")"
        oldDirName="$(basename "$old")"
        if [[ oldDirName =~ ([0-9]+)\.([0-9]+)\.([0-9]+)( .*) ]]; then
            newDirName="19${BASH_REMATCH[3]}-${BASH_REMATCH[1]}-${BASH_REMATCH[2]}${BASH_REMATCH[4]}
            echo mv -- "${path}/${oldDirName}" "${path}/${newDirName}"
        fi
    done
    

    上面是使用 GNU find 的 -print0 和 bash 的 BASH_REMATCH。如有必要,在您对 echo 进行调试并对其将要执行的操作感到满意后,将其删除。

    【讨论】:

    • 非常感谢您的帮助!这为我的问题提供了很多见解——我没有提到的一件事是我正在运行 Mac OS Sierra,并且不认为 GNU 命令可以在我的 bash 中工作。我会尝试弄乱它,看看我是否可以让它工作。
    • 您可以在 Mac 上安装 GNU 工具。去谷歌上查询。否则,如果您的文件名不包含换行符,则从 find 中删除 -print0 并从 read 中删除 -d '' ,其余部分应按原样工作。
    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多