我想重命名文件以删除不必要的点。即:
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'