ディレクトリを shred することはできない
ファイルやディスクを完全消去するコマンドとして shred
コマンドというものがありますが、ディレクトリに対しては使用できません。
$ shred dir
shred: dir: failed to open for writing: Is a directory
rm
や cp
では -r
オプションを付ければディレクトリを操作することができますが、shred
にはそのようなオプションは存在しません。
では、ディレクトリ内に存在するすべてのファイルを完全消去したい場合にはどうしたら良いでしょうか。その方法を紹介します。
Tips: rm コマンドが「完全消去」ではない理由について
rm
コマンドでは完全消去にはならない理由については こちら を参照してください。
解決法
dir
というディレクトリを完全消去したい場合、以下のコマンドを実行するだけです。
$ find dir -type f -print0 | xargs -0 shred -uvz
$ rm -rf dir
解説
find dir -type f -print0
find
コマンドで dir
ディレクトリ内のファイルのみを相対パスで一覧表示します。-type f
は「ファイルのみ」を表示するオプションです。
xargs -0 shred -uvz
xargs
コマンドを使って shred
にファイル一覧を渡します。
shred
のオプション -uvz
はそれぞれ、shred 後にファイルを削除、進捗表示、ランダム値書き込み後に 0
埋めをするオプションです。
-print0 と -0 について
find
コマンドの -print0
と xargs
コマンドの -0
については以下を参照してください。
findとxargsコマンドで-print0オプションを使う理由(改)
rm -rf dir
最後に結局 rm
使ってるんですが、これは空のディレクトリとシンボリックリンクを削除するためです。shred
コマンドではあくまでディレクトリ内のすべてのファイル (シンボリックリンクを除く) を完全消去しただけで、残った空のディレクトリとシンボリックリンクまでは削除してくれません。なので rm
コマンドで空のディレクトリとシンボリックリンクを削除します。
rm
コマンドではなく、本当にファイルが shred
コマンドで消えたのか不安な場合は rm
実行前に tree
コマンドなどを利用して空のディレクトリとシンボリックリンクのみのツリーになっていることを確認すると良いでしょう。