【问题标题】:Shell remove pattern from filenameShell 从文件名中删除模式
【发布时间】:2018-01-30 13:46:55
【问题描述】:

我有很多名为activity_unpublish_39x39.pngabc_29x29.png 等的文件。

我想把名字转换成activity_unpublish.png(去掉_39x39) 和abc.png(删除_29x29)。

谁能告诉我如何做到这一点?

在 Mac OS X 上工作会更好。

【问题讨论】:

    标签: linux shell command-line command


    【解决方案1】:

    以下小 shell 脚本应该可以在 Linux 和 Mac OS 上运行。请注意,它在当前文件夹中工作,您还必须根据您的需要更改 patsuf(此处为 suf="\.png"pat="_[0-9]+x[0-9]+$suf" 以使用您给定的示例)。
    它使用sed-E,这在manpage 中没有记录。它是 Mac OS 中的选项,在 Linux 中称为-r。在Linux中也存在but as said not documented:

    #!/bin/sh
    suf="\.png"
    pat="_[0-9]+x[0-9]+$suf"
    
    for f in *; do
       if [[ $f =~ $pat ]]; then
          newName=$(echo "$f" | sed -E "s/$pat/$suf/g")
          mv "$f" "$newName"
       fi
    done
    

    【讨论】:

    • 谢谢,既然我的问题已经解决了,还有一些紧急任务需要做,我稍后会尝试你的答案。感谢您的回答,我在上面加了一个赞:)
    【解决方案2】:

    我从好心的同事那里得到了答案。 使用这个 shell 脚本。

    #!/bin/sh
    for file in *_[0-9]*x[0-9]*.png
    do
      mv $file $(echo $file | sed 's/_[0-9]*x[0-9]*//')
    done
    

    【讨论】:

    • 您可以将此标记为答案,因为它可以解决您的问题。
    • @AndreKampling 谢谢,当我点击它时,它说你明天可以接受你自己的答案,谢谢你的善意提醒。
    猜你喜欢
    • 2014-01-06
    • 2016-05-31
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多