![使用空格从多个文件中删除某些字符](https://linux22.com/image/75811/%E4%BD%BF%E7%94%A8%E7%A9%BA%E6%A0%BC%E4%BB%8E%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%E6%9F%90%E4%BA%9B%E5%AD%97%E7%AC%A6.png)
我试图重命名目录中的一堆音乐曲目,但出现此错误:
移动多个文件时,最后一个参数必须是目录
这是脚本:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
这适用于没有空格的文件,我将如何修改这个脚本?
答案1
使用引号:
mv -- "$file" "$(echo "$file" | sed ...)"
否则mv
会看到多个参数。名为 的文件名将file name with spaces
是 4 个参数mv
。因此错误:when moving multiple files, last argument must be a directory
。当mv
有超过 2 个参数时,假设您要将多个文件移动到一个目录(这将是最后一个参数)。
但是,您似乎想从文件名中删除前 5 个字符。这可以通过以下方式更简单地完成bash
:
mv -- "$file" "${file:5}"
编辑:我添加了--
标志,感谢@的评论帕布克。现在,以破折号开头的文件-
也可以正确处理。