我有以下命令递归地将所有文件/目录重命名为小写并用 _ 替换空格。
find . -iname "*" | rename 'y/A-Z/a-z/; s/ /_/g;'
我如何扩展它以从目录中删除所有句点并只为文件保留最后一个句点?
所以输入是: 这是一个目录 这是一个文件.txt
输出 这是一个目录 this_is_a_file.txt
最佳答案
您可以在 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)
s/\.(?=.*\.)/_/g
只会在输入中前面有另一个点时替换一个点。
关于regex - Linux递归地用下划线替换所有目录的句点和除最后一个句点之外的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146061/