如何从符合S3的文件名中删除特殊字符?

时间:2018-10-10 18:09:51

标签: regex amazon-s3 sed

我正在尝试重命名整个文件系统,以符合S3命名准则。这是使用亚马逊雪球装置的要求。

有很多字符可以替换,我知道每个字符都有自己的特殊转义方式。我必须保留其中一些,例如-和

到目前为止,我已经尝试了几种sed技巧,但它总是很杂乱。

每个角色似乎都有其独特的转义方式。

还有更好的方法吗?

这是我到目前为止得到的:

    #!bin/bash
    for f in "($find ./ -type f)"; do
     newName=`sed 's/[!@?:#$%^&*()]/_/g' << '$f'``
    done

1 个答案:

答案 0 :(得分:0)

tr中使用否定/补码会容易得多。基本上,列出要允许文件使用的所有有效字符,并告诉tr用替换字符_替换其他任何内容:

    #!/bin/bash
    for filename in "($find ./ -type f)"; do
       newName=`echo -n ${filename} | tr -c 'A-Za-z0-9_.' '_'`
    done

在上面的示例中,您将允许所有可打印的大写和小写字母,数字_.。将您要允许的其他任何字符添加到列表中。

此外,仅供参考,我发现此链接详细介绍了S3对象名称应避免使用的所有字符:https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html