脚本重命名文件 - 从Android的资源文件
问题描述:
以下脚本删除破折号字符发现在当前目录(递归)中的所有文件,并替换破折号 - 字符转换为下划线字符文件名脚本重命名文件 - 从Android的资源文件
find . -type f -name '*.png' | while read FILE ; do
newfile="$(echo ${FILE} |sed -e 's/-/_/g')";
mv "${FILE}" "${newfile}" ;
done
给出一个文件包含破折号的路径(例如,drawable-hdpi/file-name.png
),脚本会尝试将其重命名为drawable_hdpi/file_name.png
- 替换目录名称中的破折号以及文件名中的破折号。
我想避免修改目录路径,只重写文件名。
有关如何修改sed
用法以跳过目录路径的任何建议?
答
shell有一些漂亮的字符串操作符来切掉部分变量。你的shell手册页有所有的细节。下面是我会怎么使用它们:
find . -type f -name '*.png' |
while read FILE; do
dir=${FILE%/*}
newfile=$(echo "${FILE##*/}" |sed -e 's/-/_/g')
mv "${FILE}" "${dir}/${newfile}"
done
说明:
dir=${FILE%/*}
砍下最短的部分从匹配/*
水珠,消除斜线和文件名,并赋予该目录的权利。
${FILE##*/}
删除左边匹配的最长部分*/
,即只留下文件名。
+0
很好用,谢谢! – aviran
使用小写变量名称以避免与环境变量的潜在冲突是一个很好的做法......请参阅https://unix.stackexchange.com/questions/321697/why-is-looping-over-finds-输出不良练习 – Sundeep
取决于你的'find'版本和基于'rename'命令的可用性,你可以'find。 -type'fname'* .png'-exec rename -n's | [^ /] + $ | $&=〜s/-/_/gr | e'{} +'并且移除干运行' - n'选项,一旦你看到该命令按预期工作 – Sundeep
@Sundeep在osx上运行,它没有重命名,所以我依赖于mv – aviran