Я ценю любую помощь заранее. Я написал скрипт для переименования всех файлов .BMP, и он, кажется, работает, но я получаю следующее сообщение об ошибке для каждого файла:
IM2019.BMP
mv: cannot stat `IM2000.BMP': No such file or directory
mv: cannot stat `IM2001.BMP': No such file or directory
mv: cannot stat `IM2002.BMP': No such file or directory
mv: cannot stat `IM2003.BMP': No such file or directory
mv: cannot stat `IM2004.BMP': No such file or directory
mv: cannot stat `IM2005.BMP': No such file or directory
mv: cannot stat `IM2006.BMP': No such file or directory
mv: cannot stat `IM2007.BMP': No such file or directory
mv: cannot stat `IM2008.BMP': No such file or directory
mv: cannot stat `IM2009.BMP': No such file or directory
mv: cannot stat `IM2010.BMP': No such file or directory
mv: cannot stat `IM2011.BMP': No such file or directory
mv: cannot stat `IM2012.BMP': No such file or directory
mv: cannot stat `IM2013.BMP': No such file or directory
mv: cannot stat `IM2014.BMP': No such file or directory
mv: cannot stat `IM2015.BMP': No such file or directory
mv: cannot stat `IM2016.BMP': No such file or directory
mv: cannot stat `IM2017.BMP': No such file or directory
mv: cannot stat `IM2018.BMP': No such file or directory
mv: cannot stat `IM2019.BMP': No such file or directory
У меня есть следующие файлы в каталоге:
hristo@HassanGrad27:~/Desktop/Test$ ls
IM0000.BMP IM0011.BMP IM1002.BMP IM1013.BMP IM2004.BMP IM2015.BMP
IM0001.BMP IM0012.BMP IM1003.BMP IM1014.BMP IM2005.BMP IM2016.BMP
IM0002.BMP IM0013.BMP IM1004.BMP IM1015.BMP IM2006.BMP IM2017.BMP
IM0003.BMP IM0014.BMP IM1005.BMP IM1016.BMP IM2007.BMP IM2018.BMP
IM0004.BMP IM0015.BMP IM1006.BMP IM1017.BMP IM2008.BMP IM2019.BMP
IM0005.BMP IM0016.BMP IM1007.BMP IM1018.BMP IM2009.BMP rename
IM0006.BMP IM0017.BMP IM1008.BMP IM1019.BMP IM2010.BMP rename~
IM0007.BMP IM0018.BMP IM1009.BMP IM2000.BMP IM2011.BMP stringtest
IM0008.BMP IM0019.BMP IM1010.BMP IM2001.BMP IM2012.BMP stringtest~
IM0009.BMP IM1000.BMP IM1011.BMP IM2002.BMP IM2013.BMP
IM0010.BMP IM1001.BMP IM1012.BMP IM2003.BMP IM2014.BMP
и я могу переименовать мои файлы следующим образом:
hristo@HassanGrad27:~/Desktop/Test$ ls
cam1-0.BMP cam1-3.BMP cam2-15.BMP cam2-9.BMP cam3-2.BMP
cam1-10.BMP cam1-4.BMP cam2-16.BMP cam3-0.BMP cam3-3.BMP
cam1-11.BMP cam1-5.BMP cam2-17.BMP cam3-10.BMP cam3-4.BMP
cam1-12.BMP cam1-6.BMP cam2-18.BMP cam3-11.BMP cam3-5.BMP
cam1-13.BMP cam1-7.BMP cam2-19.BMP cam3-12.BMP cam3-6.BMP
cam1-14.BMP cam1-8.BMP cam2-1.BMP cam3-13.BMP cam3-7.BMP
cam1-15.BMP cam1-9.BMP cam2-2.BMP cam3-14.BMP cam3-8.BMP
cam1-16.BMP cam2-0.BMP cam2-3.BMP cam3-15.BMP cam3-9.BMP
cam1-17.BMP cam2-10.BMP cam2-4.BMP cam3-16.BMP rename
cam1-18.BMP cam2-11.BMP cam2-5.BMP cam3-17.BMP rename~
cam1-19.BMP cam2-12.BMP cam2-6.BMP cam3-18.BMP stringtest
cam1-1.BMP cam2-13.BMP cam2-7.BMP cam3-19.BMP stringtest~
cam1-2.BMP cam2-14.BMP cam2-8.BMP cam3-1.BMP
Это скрипт:
#!/bin/bash
# Specify directory
for i in $(ls *.BMP)
do str="$i"
echo $str
charim=${str:2:1}
#echo $charim
if [ "$charim" -eq 0 ] && [ "$charim" -ne 1 ] && [ "$charim" -ne 2 ]; then
#echo "1"
for j in {0..9}
do mv IM000$j.BMP cam1-$j.BMP
done
for j in {10..19}
do mv IM00$j.BMP cam1-$j.BMP
done
fi
if [ "$charim" -ne 0 ] && [ "$charim" -eq 1 ] && [ "$charim" -ne 2 ]; then
#echo "2"
for j in {0..9}
do mv IM100$j.BMP cam2-$j.BMP
done
for j in {10..19}
do mv IM10$j.BMP cam2-$j.BMP
done
fi
if [ "$charim" -ne 0 ] && [ "$charim" -ne 1 ] && [ "$charim" -eq 2 ]; then
#echo "3"
for j in {0..9}
do mv IM200$j.BMP cam3-$j.BMP
done
for j in {10..19}
do mv IM20$j.BMP cam3-$j.BMP
done
fi
done
Что вызывает ошибку / предупреждение?
Большое спасибо
for f in IM*.BMP; do
n1=${f:2:1}
n2=${f:3:3}
new="cam$(( n1 + 1 ))-$(( 10#$n2 )).BMP"
echo mv "$f" "$new"
done
$(( ... ))
является арифметическим расширением. 10#$n2
принудительно обрабатывает содержимое переменной n2 как число base-10, а начальные нули отбрасываются: вы не можете использовать $(( n2 + 0 ))
, потому что вы получите «неверную восьмеричную» ошибку для n2 == 008 $
является необязательным внутри арифметического выражения, если только вы не используете base # нотация