Файлы переименования массы, удаляя точки

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

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

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

1
задан 14.09.2010, 23:10

2 ответа

Дайте этому попытку:

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

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

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

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

3
ответ дан 12.12.2019, 08:37

Используя удар:

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

Используя zsh:

autoload zmv
zmv '(**/)(*).(*)' '$1${2//./}.$3'
2
ответ дан 12.12.2019, 08:37

Теги

Похожие вопросы