我有一些设计师创建的资产,他正确地分支它们使所有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
答案 0 :(得分:4)
查看详细讨论此主题的Bash FAQ 30以及提供的示例。
关于您的解决方案:
请注意,根据惯例,环境变量( Uncaught SyntaxError: Unexpected token o
,PATH
,EDITOR
,...)和内部shell变量(SHELL
,{{ 1}},...)完全大写。所有其他变量名称应为小写。以来
变量名称区分大小写,这种约定避免意外地覆盖环境和内部变量。
“双引号”包含空格/元字符和每个展开的每个文字:BASH_VERSION
,RANDOM
,"$var"
,"$(command "$var")"
。看到
Quotes,Arguments和http://wiki.bash-hackers.org/syntax/words。
"${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