重命名文件名末尾有 $'\r 的文件(包括文件夹中的递归),而不使用重命名

重命名文件名末尾有 $'\r 的文件(包括文件夹中的递归),而不使用重命名

我在 Linux 系统上有大量包含 jpg 文件的文件夹。然而,我无意中使用在 Windows 中创建的 sh 文件移动了它们。

因此,如果运行 ls 命令,文件和结构将不会像这样:

media/mugs/mug1.jpg
media/mugs/mug2.jpg
media/mugs/mug3.jpg
media/plates/plate1.jpg
media/plates/plate2.jpg
media/plates/plate3.jpg

相反,如果我运行 ls 命令,它们会显示以下内容,开头为 ',结尾为 '$'\r':

media/mugs/'mug1.jpg'$'\r'
media/mugs/'mug2.jpg'$'\r'
media/mugs/'mug3.jpg'$'\r'
media/plates/'plate1.jpg'$'\r'
media/plates/'plate2.jpg'$'\r'
media/plates/'plate3.jpg'$'\r'

我没有权限安装程序,因此没有安装重命名,因此我只能访问内置程序,例如 find 和 mv

非常感激

答案1

使用前请先测试。

find media -name '*'$'\r' -print0 |
while IFS= read -r -d '' file
do    mv "$file" "${file%?}"
done

请参阅man bash章节参数扩展${parameter%word}用于删除最后一个字符的语法,以及help read用于读取以 find 生成的-r -d ''结尾的文件名的选项。\0print0

相关内容