Переименовать каталог с помощью переменной

У меня есть каталог, который содержит тысячи подкаталогов. Структура выглядит так:

Dirs:

  • 1
  • 2
  • 30
  • 109

Я хочу переименовать все каталоги, добавив 10000 к их текущему имени. Э.Г.

Dirs:

  • 10001
  • 10002
  • 10030
  • 10109

Я написал этот сценарий

for f in *; do
    if [[ -d $f ]]; then
        echo $f
        newd='expr $f + 10000'
        echo $newd
        mv $f newd
    fi
done

из 2 echo с, я вижу 1 и 10001. Но mv фактически перемещают все мои каталоги в новую папку с именем newd. Я пробовал $ newd, тоже не работает.

Что можно сделать, чтобы заставить эту вещь работать?

1
задан 11 June 2015 в 10:00

3 ответа

Что, если Вы делаете это?

for f in *; do
    if [[ -d $f ]]; then
        echo $f
        newd=`expr $f + 10000`
        echo $newd
        mv "$f" "$newd"
    fi
  done

таким образом, измените метки кавычки [приблизительно 111] на обратные галочки, таким образом, они выполняются на месте, и результат хранится в переменной. Также удостоверьтесь, что имели знак доллара на $newd на mv строка.

я не на 100% уверен во мне, так удостоверьтесь, что скопировали, прежде чем Вы попробуете или примерите некоторые тестовые файлы/директоров.

Редактирование: добавленные двойные кавычки для ответа, поскольку они оказались необходимыми.

0
ответ дан 11 June 2015 в 10:00

Попробуйте это:

for f in *; do 
    if [[ -d $f ]] ; then 
        mv "$f"  $(($f + 1000))
    fi
done
0
ответ дан 11 June 2015 в 10:00

Можно также использовать rename:

for f in *; do 
    [ -d "$f" ] && rename -n 's/$_/$_+1000/e' "$f"
done

Если Вы хотите переименовать каждый файл или каталог, просто работать:

rename -n 's/$_/$_+1000/e' *
2
ответ дан 11 June 2015 в 10:00

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

Похожие вопросы: