1

Я хочу переименовать файлы, чтобы удалить ненужные точки. то есть:

File.something.jpg -> Filesomething.jpg
I.Have.Too.Many.Dots.png -> IHaveTooManyDots.png

Как это может быть сделано? find -name *.*.* перечисляет их все, но я не смог написать выражение для sed, поскольку оно не поддерживает ленивые регулярные выражения.

2 ответа2

3

Попробуйте это:

sed ':a;s/\.\([^.]\+\)\./\1./;ta' 

Вы можете использовать это так:

find -name "*.*.*" | xargs -I % bash -c 'mv "%" "$(echo "%" | sed "s|^./||;:a;s/\.\([^.]\+\)\./\1./;ta")"'

Он обильно обсыпан кавычками, поэтому он должен работать с именами файлов, которые содержат пробелы.

2

Используя bash:

find . -name '*.*.*' -exec bash -c 'base=${0##*/}; base=${base%.*}; mv "$0" "${0%/*}/${base//./}.${0##*.}"' {} \;

Используя zsh:

autoload zmv
zmv '(**/)(*).(*)' '$1${2//./}.$3'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .