我正在尝试编写一个 bash 脚本,它将遍历一个目录并将文件重命名(文件名真的很疯狂,任何人都无法识别它们)为“Chapter1.mp3”,“Chapter2.mp3”,等等,但是当我这样做时,我收到以下错误:
mv: target 'Chapter##.mp3' is not a directory
我记得,该mv
命令允许您指定文件名和目录...为什么会出现此错误?以下是我的代码:
cptr=0;
for i in ./myFolder/*; do
cptr=$(($cptr+1)); # I can't remember, can I use cptr++?
mv -v $i "Chapter$cptr.mp3";
done;
我已经尝试删除文件扩展名,删除引号,甚至使用cp
命令,但我没有尝试过任何工作。为什么它要求目标只是一个目录而不是文件名?
我正在使用带有 Linux 子系统的 Ubuntu 20.04 LTS 终端;这有什么区别吗?
如果您有任何带有空格(或制表符或换行符)的文件名,那么您需要加上
$i
引号。例如,如果您的第 42 个文件名为foo bar
,则将扩展为
看起来您正在
mv
使用三个名称参数运行。mv
仅当姓氏是目录(例如,)时,使用三个或更多名称参数 运行才有效mv *.mp3 my_music
。由于您没有名为 的目录,因此您会收到报告的错误。ChapterNN.mp3
也一样
我说“如果你有任何带有空格的文件名......在其中,那么你需要加上
$i
引号。” 当然,我的意思是“你应该加上引号,这样如果$i
你的文件名中有空格……你的脚本就可以工作。”注意: 这个答案可以工作,但它不是一个好的解决方案。请参阅下面的评论和我选择作为解决方案的答案,它比我的解决方案好得多。
我在做
代替
出于某种原因,即使我有反斜杠,它也不喜欢空格,以逃避空格,所以它把事情搞砸了。我只是重命名了没有空格的文件夹,然后它工作正常。