我试图重命名目录中的一堆音乐曲目,但出现此错误:
移动多个文件时,最后一个参数必须是目录
这是脚本:
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}"
编辑:我添加了--
标志,感谢@的评论帕布克。现在,以破折号开头的文件-
也可以正确处理。