批量重命名文件,删除点

批量重命名文件,删除点

我想重命名文件以删除不必要的点。即:

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

如何才能做到这一点?find -name *.*.*列出了所有这些,但是我无法为 sed 编写表达式,因为它不支持惰性正则表达式。

答案1

尝试一下:

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'

相关内容