以递归方式将电子邮件文件从 .txt 重命名为 .eml

Rob*_*ino 2 find rename

目录“$d”包含几千个扩展名为 .txt 的电子邮件文件。要在我的电子邮件客户端中打开它们,我需要将它们重命名为 .eml

此命令是否会正确重命名它们:

find "${d}" -type f -name '*.txt' | while read f; do mv -vn "${f}" "${f%.*}".eml; done
Run Code Online (Sandbox Code Playgroud)

或者有更好,更强大的方法来做到这一点?

我想不出一种优雅的方法来使用:

-exec ...{}... \;
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 5

您的解决方案通常没问题,但它会在换行符上中断。这是一个稍微更强大的 bash4+ 解决方案:

shopt -s globstar nullglob
for file in **/*.txt; do
    mv "$file" "${file%.*}.eml"
done
Run Code Online (Sandbox Code Playgroud)