我有以下命令,它递归地将所有文件/目录重命名为小写,并用 _ 替换空格。
find . -iname "*" | rename 'y/A-Z/a-z/; s/ /_/g;'
如何扩展它以从目录中删除所有句点并只保留文件的最后一个句点?
所以输入将是:this.is.a.directory this.is.a.file.txt
输出 this_is_a_directory this_is_a_file.txt
您可以find
在 while 循环中执行此操作并使用正则表达式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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句