Ответ, получивший наибольшее количество голосов, на самом деле не работал для меня. Возможно, я делал что-то не так. Мой сценарий пытался создать файл с исходным именем, но с добавленной к нему датой и изменением расширения с .xslx на .csv. Вот что у меня сработало:
csvname=`echo $xlsx |sed 's/\.xlsx//'`"-$now"`echo $xlsx | sed 's/\(.*\.\)xlsx/\.csv/'`
Итак, для всех файлов .dat в каталоге (без добавления даты) вы можете запустить что-то вроде этого:
for i in *.dat
do mv $i `echo $i |sed 's/\.dat//'``echo $i | sed 's/\(.*\.\)dat/\.txt/'`
done
Из приведенного выше, этот раздел кода только что удалил расширение:
echo $i |sed 's/\.dat//'
И этот раздел изменяет .dat на .txt:
echo $i | sed 's/\(.*\.\)dat/\.txt/'
И, накладывая их рядом друг с другом, он объединяет два вывода в имя файла. Это как делать это:
mv [filename][.dat] [filename] + [.txt]
Хотя я использовал STDOUT вместо команды 'mv'.