我有以下命令,它递归地将所有文件/目录重命名为小写,并用_替换空格。
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
答案 0 :(得分:0)
您可以在while循环中使用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)
如果输入中有另一个DOT, s/\.(?=.*\.)/_/g
将仅替换DOT。