如何递归地重命名android资产并将dash替换为下划线

时间:2016-03-07 21:22:45

标签: android bash drawable android-drawable file-rename

我有一些设计师创建的资产,他正确地分支它们使所有dpi与他们的目录匹配所以我很高兴,因为我不必将这些文件复制到每个子文件夹但是当我检查他们的名字时他们有破折号在文件名中,这使得android编译器失败。

那么我如何制作一个bash脚本来将drawable- *下面的所有文件重命名为相同的文件名,但用下划线替换破折号?

示例:

转换它:

drawable-hdpi/
    my-icon.png
    my-icon-2.png
drawable-xhdpi/
    my-icon.png
    my-icon-2.png
drawable-xxhdpi/
    my-icon.png
    my-icon-2.png

对此:

drawable-hdpi/
    my_icon.png
    my_icon_2.png
drawable-xhdpi/
    my_icon.png
    my_icon_2.png
drawable-xxhdpi/
    my_icon.png
    my_icon_2.png

3 个答案:

答案 0 :(得分:4)

查看详细讨论此主题的Bash FAQ 30以及提供的示例。

关于您的解决方案:

  • 请注意,根据惯例,环境变量( Uncaught SyntaxError: Unexpected token o PATHEDITOR,...)和内部shell变量(SHELL,{{ 1}},...)完全大写。所有其他变量名称应为小写。以来             变量名称区分大小写,这种约定避免意外地覆盖环境和内部变量。

  • “双引号”包含空格/元字符和每个展开的每个文字:BASH_VERSIONRANDOM"$var""$(command "$var")"。看到 QuotesArgumentshttp://wiki.bash-hackers.org/syntax/words

TL; DR

"${array[@]}"

注意:"a & b"命令是故意的,因此您不会意外损坏您的文件。当你确定它会按照它应该做的那样去除它时。

答案 1 :(得分:2)

不是真正的bash解决方案,但您可以使用Larry Wall的rename实用程序:

rename -n 's#(?>\G(?!^)|.*/)[^-]*\K-#_#g' ./pathto/drawable-*/*

-n是执行测试,当您确定将其删除时。

答案 2 :(得分:0)

经过研究并阅读了几页手册之后,我创建了一个简单的脚本,实现了我想要的,这里是要点normalize_assets_script

还会将其粘贴到此处:

for f in drawable-*/*; do 
    MYDIR=$(dirname $f) # Obtaining dirname
    MYFILE=$(basename $f) # Obtaining filename
    SUB=`echo $MYFILE | sed 's/-/_/g' | tr [:upper:] [:lower:]` # Replacing "-" in filename for "_" plus making lowercase
    echo "Moving File $MYDIR/$MYFILE -> $MYDIR/$SUB" #printing info to double check
    mv $MYDIR/$MYFILE $MYDIR/$SUB #moving old file to new file (need sudo)
done