我在 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 ''
结尾的文件名的选项。\0
print0