Как удалить часть имен файлов между точками?

Я хотел бы переименовать многие файлы в этом формате

abc.123.fits
abcd.1234.fits
efg.12.fits

к этому формату

abc.fits
abcd.fits
efg.fits

Я попробовал функцию переименования, но так как часть, которую я пытаюсь заменить, не одинакова во всех файлах, это не сработало. Я использую Линукс.


person AG27    schedule 16.07.2015    source источник


Ответы (1)


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

${f%%.*} удаляет все после первой точки, включая точку. ${f##*.} удаляет все до последней точки, включая точку (т.е. получает расширение файла). Объединение этих двух с точкой между ними дает желаемый результат.

Вы можете изменить * на более строгий шаблон, такой как *.fits, если вы не хотите переименовывать все файлы в текущем каталоге. Кавычки вокруг параметров mv необходимы, если какие-либо имена файлов содержат пробелы.

В bash доступно множество других выражений подстановки переменных; см. ссылку, такую ​​как подстановка параметров Bash TLDP для получения дополнительной информации.

person Lithis    schedule 16.07.2015