2017-03-31 12 views

回答

0

你可以做到这一点使用find在而循环使用正则表达式离开最后DOT的文件:

while IFS= read -rd '' entry; do 
    entry="${entry#./}"   # strip ./ 
    if [[ -d $entry ]]; then 
     rename 'y/A-Z/a-z/; s/ /_/g; s/\./_/g' "$entry" 
    else 
     rename 'y/A-Z/a-z/; s/ /_/g; s/\.(?=.*\.)/_/g' "$entry" 
    fi 
done < <(find . -iname '*' -print0) 

s/\.(?=.*\.)/_/g只会如果输入中有另一个DOT,则更换DOT。

+0

当我运行上述命令时,它会引发错误 - 无法重命名./this.is.a.test _/this_is_a.test:没有这样的文件或目录。任何想法为什么它会抛出这个错误? –

+0

我认为这是因为'。/'开头。现在试试我编辑的脚本。现在感谢 – anubhava

+1

像梦一样工作 –

相关问题