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

时间:2014-02-06 18:46:47

标签: bash rename

我需要帮助创建一个脚本,该脚本将通过指定目录并重命名与名称匹配的文件夹。在我的情况下,一些(/ Users /).bak附加到他们,我想删除。

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

2 个答案:

答案 0 :(得分:1)

find /Users -type d -iname '*.bak' | while read d; do
    mv "$d" "${d%.bak}"
done

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

${var%stuff}:从结尾处移除glob stuff ${var#stuff}:从前面删除glob stuff

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

答案 1 :(得分:0)

删除名为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查找以.bak扩展名-type d以某种方式命名的文件夹-iname '*.bak',并将这些名称移至xargs,收集名称并将其删除rmdirrm -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