我在当前目录中有以下文件:
file_73tyd7d.jpg
file_e8djuh.jpeg
file_eidie8d.jpg
file_iadiijj.jpg
我想:
0.jpg
1.jpeg
2.jpg
3.jpg
我首先做:
NB=0;for FILE in `ls`;do echo mv "${FILE}" "${NB}.${FILE#*.*}";((NB=NB+1));done
或
NB=0;for FILE in `ls`;do echo mv "${FILE}" "${NB}"."${FILE#*.*}";((NB=NB+1));done
输出:
file_73tyd7d.jpg 0.jpg -> why is that?
mv file_e8djuh.jpeg 1.jpeg
mv file_eidie8d.jpg 2.jpg
mv file_iadiijj.jpg 3.jpg
除了第一个文件,它看起来很好。
NB=0;for FILE in `ls`;do mv "${FILE}" "${NB}.${FILE#*.*}";((NB=NB+1));done
和我有以下错误:
mv: cannot stat ''$' 33''[H'$' 33''[2J'$' 33''[3J'$' 33''[0m'$' 33''[01;35mfile_73tyd7d.jpg'$' 33''[0m': No such file or directory
mv: cannot stat ''$' 33''[01;35mfile_e8djuh.jpeg'$' 33''[0m': No such file or directory
mv: cannot stat ''$' 33''[01;35mfile_eidie8d.jpg'$' 33''[0m': No such file or directory
mv: cannot stat ''$' 33''[01;35mfile_iadiijj.jpg'$' 33''[0m': No such file or directory
本任务不使用ls
。ls
应该以交互方式使用(参见为什么不应该解析ls的输出)。此外,不要为自己的变量名使用全大写名称(请参阅正确的Bash和shell脚本变量大写)。你的脚本应该是这样写的:
#!/bin/bash
nb=0
for file in *; do
echo mv -i -- "$file" "$((nb++)).${file##*.}"
done