以下脚本查找当前目录中的所有文件(递归)并替换短划线 - 字符以在文件名中为字符加下划线
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%/*}
从右边切掉与/*
glob匹配的最短部分,删除斜杠和文件名,给出目录。
${FILE##*/}
从左匹配*/
中删除最长的部分,即只留下文件名。