Answers:
使用引号:
mv -- "$file" "$(echo "$file" | sed ...)"
否则会mv看到多个参数。名为的文件名将file name with spaces是的4个参数mv。因此错误:when moving multiple files, last argument must be a directory。当mv有两个以上的参数时,假定您要将多个文件移动到目录中(这将是最后一个参数)。
但是,看起来您想从文件名中删除前5个字符。这可以通过以下操作更简单地完成bash:
mv -- "$file" "${file:5}"
编辑:--由于@ pabouk的评论,我添加了标志。现在,以破折号开头的文件-也已正确处理。
mv。:)您处理了这种情况:) ---我的意思是echo本身存在问题。例如GNU回声(包括单机和内置的bash)不打印这些字符串:-n,-e和-E。即使根据POSIX定义,也无法echo可靠使用,因为某些情况尚未定义。符合XSI的echo将解释反斜杠转义序列。--- printf '%s\n'没有这种不需要的和依赖实现的效果。
-。代替echo "$file"使用printf '%s\n' "$file"。