我正在尝试重命名整个文件系统,以符合S3命名准则。这是使用亚马逊雪球装置的要求。
有很多字符可以替换,我知道每个字符都有自己的特殊转义方式。我必须保留其中一些,例如-和
到目前为止,我已经尝试了几种sed技巧,但它总是很杂乱。
每个角色似乎都有其独特的转义方式。
还有更好的方法吗?
这是我到目前为止得到的:
#!bin/bash
for f in "($find ./ -type f)"; do
newName=`sed 's/[!@?:#$%^&*()]/_/g' << '$f'``
done
答案 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