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"
。