Почему в этом скрипте 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"?

Другие вопросы по тегам