Почему в этом скрипте bash работает mv?
Я пытаюсь написать простой скрипт, который будет перемещать файлы в списке последовательных файлов в каталоге, если он отсутствует. Например, если у меня есть каталог с файлами с именами "1", "2", "3", "5" и т. Д., Я хочу переместить "3" в "4", "3" в "2" и т. Д. У меня есть следующий код ниже. Верхний и Нижний соответствуют значениям, которые я хочу сдвинуть. Используя приведенный выше пример, LOWER будет 1, а UPPER будет 5.
for z in $( eval echo {$UPPER..$LOWER}) ; do
checkfile $DIRNAME $z #Returns -1 on file missing
if [[ $? -ne 0 ]]; then
echo "Found bad match"
for y in $( eval echo {$z..$LOWER}) ; do
n=$(($y - 1))
echo "$y $n"
mv "$n" "$y"
done
exit 0
fi
done
Я получаю следующий вывод
Found bad match
18 17
mv: cannot stat `17': No such file or directory
17 16
mv: cannot stat `16': No such file or directory
16 15
mv: cannot stat `15': No such file or directory
15 14
mv: cannot stat `14': No such file or directory
Я не совсем уверен, почему М.В. жалуется. Любые идеи будут высоко ценится!
1 ответ
Решение
Ваш mv
Команда пытается переместить файлы в локальный каталог, но проверяемые файлы находятся в другом месте (в $DIRNAME
). Возможно попробовать mv "$DIRNAME/$n" "$DIRNAME/$y"
?