删除包含只读目录的目录树

删除包含只读目录的目录树

如果您运行rm -rf dirdir包含只读目录,那么它将无法删除该目录中的任何文件。

有什么办法可以让rmchmod目录首先被识别并可写吗?

我可以chmod -R o+w dir先这样做,但这会比只在必要时才这样做要慢。

答案1

有什么办法可以让rmchmod目录首先被识别并可写吗?

rm命令需要对目录的写访问权限才能从中删除文件和目录。

您的选择是

  • 修复权限以确保不可写目录可写 ( chmod -R u=rwx {toplevel_directory}; rm -rf {toplevel_directory})
  • 使用 root 权限来获得隐式写入访问权限(不真正推荐sudo rm -rf {toplevel_directory}:)

如果您非常关心速度优化,您可以编写一个脚本或函数,rm仅在第一次失败时重试:

rm-rf() {
    local item rs=0 ss=0

    for item in "$@"
    do
        if [ -e "$item" ]
        then
            rm -rf "$item"
            rs=$?

            if [ $rs -gt 0 ]
            then
                # Try again
                chmod -R u=rwx "$item" 2>/dev/null
                rm -rf "$item" 2>/dev/null && rs=0
            fi

            [ $rs -eq 0 ] && echo "Removed: $item" >&2
        else
            echo "Skipping: $item" >&2
            rs=1
        fi

        # Count the number of failed arguments
        [ $rs -gt 0 ] && ((ss++))
    done
    return $ss
}

相关内容