Cas*_*per 8 linux scripting bash sed
我正在尝试重命名目录中的一堆音乐曲目,但出现此错误:
移动多个文件时,最后一个参数必须是目录
这是脚本:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
Run Code Online (Sandbox Code Playgroud)
这适用于没有空格的文件,我将如何修改此脚本?
cha*_*aos 14
使用引号:
mv -- "$file" "$(echo "$file" | sed ...)"
Run Code Online (Sandbox Code Playgroud)
否则会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}"
Run Code Online (Sandbox Code Playgroud)
编辑:--感谢@pabouk的评论,我添加了标志。现在以破折号开头的文件-也被正确处理。
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |