【问题标题】:Swap first and last four characters in a filename交换文件名中的第一个和最后四个字符
【发布时间】:2017-06-13 21:11:50
【问题描述】:

堆栈溢出。

我有一堆工作笔记。我将它们保存为降价文件,并使用日期和年份对其进行格式化 - 例如,今天的标题为 06132017.md

我即将工作一年,所以我有很多这样的文件。我希望将命名约定从月/日优先更改为年优先,以便我可以按字母顺序对它们进行排序并轻松找到我需要的日期。

因此 06132017.md 将变为 20170613.md - 这将使 2016 和 2017 不会按 aplha 顺序混合。有没有可以在文件夹上运行的命令来执行此操作?

【问题讨论】:

    标签: bash command-line markdown filenames


    【解决方案1】:

    如果您有 Perl 重命名实用程序,那么操作起来相当简单:

    $ prename 's/^(....)(....)(\.md)$/$2$1$3/' *.md 
    06132017.md renamed as 20170613.md
    

    点匹配任何字符,括号组,替换侧的$N 插入组中捕获的字符。

    或者只是在 Bash 中:

    $ for x in ????????.md ; do mv -v "$x" "${x:4:4}${x:0:4}.md" ; done
    '06132017.md' -> '20170613.md'
    

    ${var:n:m} 采用长度为m 的子字符串,从变量var 的位置n 开始。

    【讨论】:

    • 没有前缀,你总是可以在 perl 中做这一切,perl -e 'map {rename "$&", "$2$1$3" if /^(.{4})(.{4})(\.md)/} <*.md>'
    猜你喜欢
    • 2013-12-23
    • 2013-06-17
    • 1970-01-01
    • 2015-03-28
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多