【发布时间】:2017-04-09 18:32:48
【问题描述】:
以下脚本(递归)查找当前目录中的所有文件,并将破折号 - 字符替换为文件名中的下划线字符
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 用法以跳过目录路径有什么建议吗?
【问题讨论】:
-
最好使用小写的变量名来避免与环境变量的潜在冲突...参见unix.stackexchange.com/questions/321697/…
-
根据您的
find版本和基于perl 的rename命令的可用性,您可以执行find . -type f -name '*.png' -exec rename -n 's|[^/]+$|$&=~s/-/_/gr|e' {} +并在您看到该命令按预期工作时删除空运行-n选项跨度> -
@Sundeep 在 osx 上运行,它没有 rename,所以我依赖 mv
-
那么我建议
find . -type f -name '*.png' -exec bash -c 'd=$(dirname "$0"); f=$(basename "$0"); echo mv "$0" "$d/${f//-/_}"' {} \;而不是使用 find+while -
@Sundeep 看起来不错 :)
标签: bash