使用bash批量重命名连字符之间的文件名

时间:2016-07-08 16:11:18

标签: linux bash file-rename batch-rename

我是一名学生,我很擅长打击,所以非常感谢任何帮助!

我正在尝试重命名一批看起来像这样的文件:local_date_1415 + 6556_0001.txt和local_date_1415 + 6556_0002.txt。

示例文件名:uuw_07052006_1415 + 6556_0001.txt

我需要每个文件名的“1415 + 6556”部分在其前面有2M,如“2M1415 + 6556”。文件夹中大约一半的文件已经有2M,所以我不能只搜索字符串并替换。

有没有办法使用“_”作为分隔符重命名该批文件,这样我就可以用正确的字符串完全替换所有第三部分?

我的机器上有重命名命令,我只是不确定如何在这里使用它。

1 个答案:

答案 0 :(得分:0)

使用您的rename版本:

rename _ %   *_????+*.txt    # replace the first underscore with a percent
rename _ _2M *_????+*.txt    # add 2M after the second underscore
rename % _   *_2M????+*.txt  # return the first underscore back

仅在文件名不包含%时才有效。如果他们这样做,请选择一个不同的角色。

您也可以自己编写循环:

#! /bin/bash
for f in *_????+*.txt ; do
    before=${f%[0-9][0-9][0-9][0-9]+*}
    after=${f#*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}
    mv "$f" "$before"2M"$after"
done