Неправильный синтаксис переменной. Переменная разыменовывается как $ {n}
. Поэтому попробуйте
sed -i -e "1,${n}d" filename
Вот решение, которое мне удалось заставить работать:
#!/bin/bash
shopt -s nullglob
my_files='/root/temp/files'
old_name='essay'
new_name='new_name'
for file in "${my_files}/${old_name}"*; do
my_extension="${file##*.}"
mv "$file" "${my_files}/${new_name}.${my_extension}"
done
shopt -s nullglob
Это предотвратит ошибку, если каталог, который он анализирует, пуст
for file in "${my_files}/${old_name}"*; do
Мы будем перебирать все file
в /root/temp/files/
, если они начинаются сessay
my_extension="${file##*.}"
Это жадно обрежет все до последнего.
найденного в имени файла (, надеюсь, оставив вам только расширение)
mv "$file" "${my_files}/${new_name}.${my_extension}"
При этом старому файлу присваивается новое имя с сохранением расширения. (переименовать)
Если вы используете zsh, вы можете сделать это:
autoload zmv
zmv -w 'essay.*' 'new_name.$1'
любезно предоставлен этим ответом .