我需要帮助创建一个脚本,该脚本将遍历指定的目录并重命名与名称匹配的文件夹。就我而言,有些附加了 (/Users/) .bak,我希望将其删除。
提前感谢您提供的任何帮助。
find /Users -type d -iname '*.bak' | while read d; do
mv "$d" "${d%.bak}"
done
请记住将文件名放在引号中,以防名称中有空格。
${var%stuff}
: 从末端
取下球stuff
${var#stuff}
: 从正面取下球stuff
这两个习语,当在循环中使用时,非常强大,并且适用于任何 Bourne shell 变体(dash、bash、ksh 等)。
删除名为"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
find
查找-type d
以某种方式命名.bak扩展名-iname '*.bak'
并将这些名称交给xargs
,后者收集名称并将其删除rmdir
或rm -rf
更新:
若要删除扩展名(重命名文件夹),可以使用while read
循环并mv
find /Users -type d -iname '*.bak' | while read d; do
t=$(echo $d | sed -e 's/.bak$//')
mv $d $t
done