>[оверквотинг удален]
>> for file in /dir/*; do mv ${file} ${file%...}; done
>> Пример.
>> mkdir ~/dir
>> touch ~/dir/some\ file
>> for file in ~/dir/*; do mv ${file} ${file}.new; done
>> for file in ~/dir/*; do mv ${file} ${file%.???}; done
> 1) на сколько я понял, сложность была в том, чтобы вставить суффикс
> между именем файла и расширением файла, а не просто дописать в
> конец, то есть чтобы расширение файла не поменялось
> 2) использование ${file} приведёт к ошибке для файлов, содержащих пробел, нужно "${file}" Пример.
mkdir ~/dir
touch ~/dir/some\ file
touch ~/dir/some\ file.extension
cd ~/dir
export addword=".new"
for file in *; do
case ${file##*.} in
${file}) echo "file not have extension";;
*) mv -v ${file} ${file%.*}${addword}.${file##*.};;
esac;
done
for file in *; do
case ${file##*.} in
${file}) echo "file not have extension";;
*) mv -v ${file} ${file%${addword}.*}.${file##*.};;
esac;
done
Спасибо за замечание, невнимателен. Сложностей здесь нет, достаточно использовать "Parameter Expansion".
>использование ${file} приведёт к ошибке для файлов, содержащих пробел, нужно "${file}"
Прошу внимательней посмотреть на пример, some\ file содержит пробел. В использвуемой конструкции экранирование не требуется.
Пример.
file=file\ name\ with\ blank
touch ${file}
mv -v ${file} ${file}.new
«file name with blank» -> «file name with blank.new»
Примечание.
В скрипте, можно предусмотреть как необходимо обрабатывать файлы без расширений (показано в примере).
И как следует поступать с определёнными расширениями, например, file.tar.gz