Я хочу переименовать файлы для удаления ненужных точек. т.е.:
File.something.jpg -> Filesomething.jpg
I.Have.Too.Many.Dots.png -> IHaveTooManyDots.png
Как это может быть сделано? find -name *.*.*
перечисляет их всех, но я не мог записать выражение для sed, поскольку он не поддерживает ленивый regexes.
Дайте этому попытку:
sed ':a;s/\.\([^.]\+\)\./\1./;ta'
Вы могли использовать его как это:
find -name "*.*.*" | xargs -I % bash -c 'mv "%" "$(echo "%" | sed "s|^./||;:a;s/\.\([^.]\+\)\./\1./;ta")"'
Это было опрыснуто подробно с кавычками, таким образом, это должно работать с именами файлов, которые включают пробелы.
Используя удар:
find . -name '*.*.*' -exec bash -c 'base=${0##*/}; base=${base%.*}; mv "$0" "${0%/*}/${base//./}.${0##*.}"' {} \;
Используя zsh:
autoload zmv
zmv '(**/)(*).(*)' '$1${2//./}.$3'