使用BASH重命名具有特定扩展名的文件夹

使用BASH重命名具有特定扩展名的文件夹,bash,rename,Bash,Rename,我需要帮助创建一个脚本,将通过指定的目录和重命名文件夹匹配的名称。在我的例子中,有些附加了(/Users/).bak,我希望将其删除 提前感谢您提供的任何帮助。删除名为Users的子目录中扩展名为.bak的文件夹 find /Users -type d -iname '*.bak' -print0 | xargs -0 rmdir 如果文件夹不是空的,则必须改用rm-rf find /Users -type d -iname '*.bak' -print0 | xargs -0 rm -rf

我需要帮助创建一个脚本,将通过指定的目录和重命名文件夹匹配的名称。在我的例子中,有些附加了(/Users/).bak,我希望将其删除


提前感谢您提供的任何帮助。

删除名为Users的子目录中扩展名为
.bak
的文件夹

find /Users -type d -iname '*.bak' -print0 | xargs -0 rmdir
如果文件夹不是空的,则必须改用
rm-rf

find /Users -type d -iname '*.bak' -print0 | xargs -0 rm -rf
查找以.bak扩展名命名的文件夹
-type d
,并将这些名称交给iname'*.bak',后者收集名称并将其删除或删除

更新:

要删除扩展名(重命名文件夹),可以在读取时使用
循环并

请记住将文件名放在引号中,以防名称中有空格

${var%stuff}
:从末尾删除glob
stuff

${var#stuff}
:从前面移除glob
stuff


这两个习惯用法在循环中使用时非常强大,适用于任何Bourne shell变体(dash、bash、ksh等)

find-type d-name'*(/Users/).bak'-delete
/Users/
?您的意思是它是前面路径的一部分,不是吗?抱歉/Users是目录,并附加了.bak。我希望删除任何扩展名为.bak的目录。我不想删除目录,我只想删除扩展名。将test.bak重命名为test这非常有效。我添加了-maxdepth,因为我只需要/Users。非常感谢你的帮助!
find /Users -type d -iname '*.bak' | while read d; do
    t=$(echo $d | sed -e 's/\.bak$//')
    mv $d $t
done
find /Users -type d -iname '*.bak' | while read d; do
    mv "$d" "${d%.bak}"
done