【问题标题】:Using BASH to rename folders with specific extension使用 BASH 重命名具有特定扩展名的文件夹
【发布时间】:2014-02-07 03:08:55
【问题描述】:

我需要帮助创建一个脚本,该脚本将遍历指定目录并重命名与名称匹配的文件夹。就我而言,有些人附加了 (/Users/) .bak ,我希望将其删除。

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

【问题讨论】:

  • find -type d -name '*(/Users/) .bak' -delete.
  • /Users/ 已附加?您一定是说它是前面路径的一部分,不是吗?
  • 对不起 /Users 是目录并附加了 .bak。我希望删除任何带有 .bak 扩展名的内容。

标签: bash rename


【解决方案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 等)

【讨论】:

    【解决方案2】:

    删除名为 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
    

    【讨论】:

    • 我不想删除目录,我只想删除扩展名。例如:test.bak 重命名为 test
    • 这很好用。我添加了 -maxdepth 因为我只需要 /Users。非常感谢您的帮助!
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多