Удалить несколько расширений из всех файлов в каталоге (Bash)

Благодаря испорченным моим первым попыткам сделать это, теперь у меня есть каталог, полный файлов, которые теперь называются так:

valery-special-music-poetry.txt.mtxt.md.md.txt.mtxt.md.md.md

который мне нужно назвать:

valery-special-music-poetry.md

как я могу сделать это из командной строки?

Я использую: GNU bash, версия 3.2.48(1)-выпуск (x86_64-apple-darwin12)


person Chris    schedule 05.11.2012    source источник


Ответы (4)


Это может помочь вам

#!/bin/bash
for filename in *
do
    x=`echo $filename | sed 's/\..*\./\./g'`
    mv $filename $x
done

Сохраните это в файл с именем rename.sh

chmod +x rename.sh
./rename.sh
person Konza    schedule 05.11.2012

Сама Шелл:

for i in *; do mv "$i" "${i%%.*}.${i##*.}"; done

Если ваш каталог не является одноуровневым, я предлагаю использовать find, если он у вас есть в Apple.

person MeaCulpa    schedule 05.11.2012

person    schedule
comment
Отказ от ответственности: как обычно, это вызовет проблемы, если ваши имена файлов содержат пробелы. См. cyberciti.biz/tips/handling-filenames-with -spaces-in-bash.html для обходных путей - person user123444555621; 05.11.2012

person    schedule
comment
Я думаю, что awk -vFS=.txt будет безопаснее - person MeaCulpa; 09.11.2012