文件名中未填充的零填充数字

时间:2015-08-24 15:10:27

标签: bash shell sed renaming

我有一个名为

的文件目录
SELECT web_Cdr_export.[Originating TG], web_Cdr_export.[Inpulsed Digits],
web_Cdr_export.ANI 
FROM fraud_IP_Blocks_country, web_Cdr_export 
WHERE 
(((Left([fraud_IP_Blocks_country]![IP Block],1) & ".") = 
Left([web_Cdr_export]![Originating TG],1) & "."));

现在我想使用一个命令行工具,它希望图像按字母顺序排列。但这些文件名的字母顺序为:image_1.jpg image_2.jpg ... image_10.jpg ... image_335.jpg

如何使用简短的shell / bash命令重命名这些文件?我发现image_100.jpg image_101.jpg ... image_10.jpg image_11.jpg ... image_1.jpg ...可能是一种可行的方法,但这个工具对我来说是一个谜。

2 个答案:

答案 0 :(得分:2)

使用bash:

    var tree = [];
for(var i = 0; i < json_data.length; i++) {
    for(j in json_data[i]) {
        var tempObject = {};
        tempObject.label = j;
        tempObject.children = [];
        console.log(json_data[i][j]);
        for(var k = 0; k < json_data[i][j].length; k++) {
            var tempObject2 = {};
            tempObject2.label = 'Record ' + (k + 1);
            tempObject2.children = [];
            for(var l in json_data[i][j][k]) {
                var tempObject3 = {};
                tempObject3.label = l;
                tempObject3.data = {
                    definition: "This is header",
                    data_can_contain_anything: true
                }
                tempObject2.children.push(tempObject3);
            }
            tempObject.children.push(tempObject2);
        }
        tree.push(tempObject);
    }
}

如果一切正常,请删除for i in *; do if [[ $i =~ (image_)([0-9]{1,2})(\.jpg) ]]; then printf -v num "%03d" "${BASH_REMATCH[2]}"; echo mv -v "$i" "${BASH_REMATCH[1]}${num}${BASH_REMATCH[3]}"; fi; done

使用具有这些文件名的目录进行测试:

image_100.jpg
image_101.jpg
image_10.jpg
image_11.jpg
image_1.jpg
image_2.jpg
image_334.jpg
image_335.jpg
image_3.jpg

创建的命令:

mv -v image_10.jpg image_010.jpg
mv -v image_11.jpg image_011.jpg
mv -v image_1.jpg image_001.jpg
mv -v image_2.jpg image_002.jpg
mv -v image_3.jpg image_003.jpg

结果:

image_001.jpg
image_002.jpg
image_003.jpg
image_010.jpg
image_011.jpg
image_100.jpg
image_101.jpg
image_334.jpg
image_335.jpg

答案 1 :(得分:0)

好的我找到了一个解决方案,不是使用shell命令,而是编写一个简单的ruby脚本:

input = Dir.glob("image*.jpg")

input.each do |name|
  parts = name.split /[_\.]/
  number = parts[1]
  number = number.rjust(3, '0')
  new_name = [parts[0], '_', number, '.', parts[2]].join
  File.rename(name, new_name)
end