読み取り専用ディレクトリを含むディレクトリツリーの削除

読み取り専用ディレクトリを含むディレクトリツリーの削除

読み取り専用ディレクトリを実行してrm -rf dir含めるdirと、そのディレクトリのファイルを削除できません。

まず、rmこのディレクトリを認識して書き込むことができる方法はありますか?chmod

最初に行うこともできますが、chmod -R o+w dir必要なときだけするよりも遅くなります。

ベストアンサー1

まず、rmこのディレクトリを認識して書き込むことができる方法はありますか?chmod

この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
}

おすすめ記事