首页 > 解决方案 > 如何处理 MV 命令中的空格

问题描述

我有以下脚本,它根据特定的文件名字符串重命名文件。该脚本工作正常,直到我不得不将它应用到一个包含带空格的文件夹名称的目录。

脚本:

for file in `find /home/splunkLogs/Captin/PPM\ Images/PXT  -type f -name '*.jpg'`; do mv -v "$file" "${file/-0.jpg/_Page_1.jpg}"; done

您会注意到文件名“PPM Images”,其中有一个空格。我添加了一个反斜杠,以便路径可读,但我收到错误“mv:无法统计/home/splunkLogs/Captin/PPM:没有这样的文件或目录。我还尝试将文件夹名称放在路径中的引号中并收到同样的错误任何人都可以指导我使用 MV 命令处理文件名空间的解决方案吗?

标签: linuxbashunix

解决方案


所以不要使用for. 阅读https://mywiki.wooledge.org/BashFAQ/001

find /home/splunkLogs/Captin/PPM\ Images/PXT  -type f -name '*.jpg' |
while IFS= read -r file; do
     mv -v "$file" "${file/-0.jpg/_Page_1.jpg}"
done

或更好:

find /home/splunkLogs/Captin/PPM\ Images/PXT  -type f -name '*.jpg' -print0 |
while IFS= read -r -d '' file; do
     mv -v "$file" "${file/-0.jpg/_Page_1.jpg}"
done

不要使用反引号`。使用$(...)替代是非常优选的。


推荐阅读