【问题标题】:bulk renaming files rearranging file names based on delimiter批量重命名文件根据分隔符重新排列文件名
【发布时间】:2016-12-02 05:02:23
【问题描述】:

我看到了与此类似的问题,但我没有看到我需要的确切答案,并且似乎无法理解我需要做的正则表达式、awk、sed、grep、重命名发生。

我在一个目录中有文件,这些文件从另一个目录的多个子目录按顺序命名,使用 find 管道连接到 xargs。

我使用的命令:    

find `<dir1>` -name "*.png" | xargs cp -t `<dir2>`

这导致第二个目录包含重复的文件名,按如下顺序命名:

&lt;name&gt;.png
&lt;name&gt;.png.~1~
&lt;name&gt;.png.~2~
...
&lt;name&gt;.png.~n~

我想做的是将所有以 ~*~ 结尾的文件重命名如下:

&lt;name&gt;.#.png   其中“#”是文件名末尾“~”之间的数字

任何帮助将不胜感激。

【问题讨论】:

    标签: awk sed file-rename


    【解决方案1】:

    使用 Perl 的 rename(独立命令):

    rename -nv 's/^([^.]+)\.(.+)\.~([0-9]+)~/$1.$3.$2/' *
    

    如果一切正常,请删除选项-n

    【讨论】:

    • Cyrus 更进一步,现在不管文件扩展名是什么,无论是 png、jpg、jpeg、ico 等,它都会使用正确的扩展名。
    【解决方案2】:

    可能有更简单的方法,但这里有一个小 shell 脚本,使用 grepawk 来实现你想要的

    for i in $(ls|grep ".png."); do 
    name=$(echo $i|awk -F'png' '{print $1}');
    n=$(echo $i|awk -F'~' '{print $2}'); 
    mv $i $name$n.png; 
    done
    

    【讨论】:

    • 我应该在问题中提到我正在寻找一个单行答案 - 赛勒斯在上面提供了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2013-12-19
    • 2014-12-11
    • 2017-04-20
    • 2019-09-27
    • 2017-03-01
    相关资源
    最近更新 更多