首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac OS X上的批量重命名屏幕截图

Mac OS X上的批量重命名屏幕截图
EN

Stack Overflow用户
提问于 2012-08-02 17:23:53
回答 2查看 451关注 0票数 0

自定义批量重命名文件

您好,Mac的屏幕截图的文件名非常长的格式。我想要重命名路径/Users/me/desktop中的任何一个。

以下是文件名的一些示例:

代码语言:javascript
复制
Screen Shot 2012-08-02 at 1.15.29 AM.png
Screen Shot 2012-08-02 at 1.22.12 AM.png
Screen Shot 2012-08-02 at 1.22.14 PM.png
Screen Shot 2012-08-02 at 1.22.16 PM.png

曾经有人告诉我,不要对ls执行for循环,所以这一次我尝试全球化。到目前为止,这是我能想到的全部,但我已经知道如何karen包装表达式,然后以我想要的格式将其重命名为文件:

代码语言:javascript
复制
 for i in *; do
      screen_name=$(echo $i | grep --only-matching --extended-regexp '(Screen\ Shot)\ [0-9]+-[0-9]+-[0-9]+\ at\ [0-9]+\.[0-9]+.[0-9]+.[AP]M\.png');
      echo $screen_name;
 done

我不确定时间的小时数,最保险的做法是假设所有时间段都是2位数,因此1.14.29和01.15.29

代码语言:javascript
复制
ss.08-02-12-01.15.29-AM.png
ss.08-02-12-01.22.12-AM.png
ss.08-02-12-01.22.14-PM.png
ss.08-02-12-01.22.16-PM.png

最终目标是一个bash脚本,它在运行时会将上述路径下的所有文件重命名为列出的新格式。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-02 18:13:24

代码语言:javascript
复制
for i in "Screen Shot"*.png; do
    new=`echo $i |awk '
        {
            split($3,a,"-")
            split($5,b,".")
            printf("ss.%s-%s-%s-%02d.%02d.%02d-%s",a[2],a[3],a[1],b[1],b[2],b[3],$6)
        }
    '`
    mv "$i" $new
done

之前的

代码语言:javascript
复制
Screen Shot 2012-08-02 at 1.22.16 PM.png
Screen Shot 2012-09-02 at 13.42.06 PM.png

之后的

代码语言:javascript
复制
ss.08-02-2012-01.22.16-PM.png
ss.09-02-2012-13.42.06-PM.png

编辑:steve建议的

代码语言:javascript
复制
printf("ss.%s-%s-%s-%02d.%02d.%02d-%s",a[2],a[3],substr(a[1]3,2),b[1],b[2],b[3],$6)

哪一项会产生

代码语言:javascript
复制
ss.08-02-12-01.22.16-PM.png
ss.09-02-12-13.42.06-PM.png
票数 2
EN

Stack Overflow用户

发布于 2012-08-02 17:44:34

您可以使用流编辑器sed来匹配和替换正则表达式。你会做这样的事情

代码语言:javascript
复制
echo $i | sed "s/PATTERN/REPLACE/"

从$i生成文件名。sed将从标准输入中读取,搜索(命令)模式并将其替换为REPLACE。

在你的REGEXP模式中,你可以通过用括号()来标记单独的组,在大多数情况下,你必须使用()来转义它们,并使用#在替换模式中访问这些部分,其中#是从1开始的子组的编号。

代码语言:javascript
复制
echo "ScreenShotXYZ.png" | sed "s/ScreenShot\(.*\)\.png/\1.png/"

在这里,XYZ与括号中的表达式匹配,可以在替换字符串中使用\1进行访问。因此,整个模式都被XYZ.png所取代。

因此,使用您的regexp进行匹配,将相关块括起来,并执行如下操作

代码语言:javascript
复制
ss.\1.\2.(and so on)

为您的替换模式。仍然有一些方法可以优化这个过程,首先使用sed将破折号替换为点,然后将整个时间块分组到一个模式中,但首先这样编写代码会更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11774560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档