У меня есть каталог, который содержит тысячи подкаталогов. Структура выглядит так:
Dirs:
Я хочу переименовать все каталоги, добавив 10000 к их текущему имени. Э.Г.
Dirs:
Я написал этот сценарий
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, тоже не работает.
Что можно сделать, чтобы заставить эту вещь работать?
Что, если Вы делаете это?
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% уверен во мне, так удостоверьтесь, что скопировали, прежде чем Вы попробуете или примерите некоторые тестовые файлы/директоров.
Редактирование: добавленные двойные кавычки для ответа, поскольку они оказались необходимыми.
Попробуйте это:
for f in *; do
if [[ -d $f ]] ; then
mv "$f" $(($f + 1000))
fi
done
Можно также использовать rename
:
for f in *; do
[ -d "$f" ] && rename -n 's/$_/$_+1000/e' "$f"
done
Если Вы хотите переименовать каждый файл или каталог, просто работать:
rename -n 's/$_/$_+1000/e' *