ディレクトリを削除し、同じ名前と権限を持つ新しいディレクトリを作成する

ディレクトリを削除し、同じ名前と権限を持つ新しいディレクトリを作成する

ディレクトリとその内容を繰り返し削除してから、同じ名前と権限で再作成したいと思います。ディレクトリは削除される前に私が作成または所有していたかもしれませんが、そうではなかったかもしれませんが、Rootによって作成されたフォルダに触れるのではなく、私と同じレベルのユーザーが作成/所有するフォルダだけに触れると確信しています。

ディレクトリとその内容の両方を再帰的に削除するコマンドがあります。

rm -rf path/to/somefolder 2> /dev/null
## OR ##
rm -rf /some/path/.* 2> /dev/null && rm -rf /some/path 2> /dev/null

しかし、削除する前に権限を取得し、新しく作成されたディレクトリに再適用するにはどうすればよいですか?

ベストアンサー1

使いやすいmtree

a/現在のディレクトリをルートにするパスが与えられた場合:

235158  1 drwx------    3 jim     wheel   4 Apr  1 08:08 .
235199  1 drwxr-xr-x    3 jim     wheel   3 Apr  1 08:05 ./a
234526  1 drwxr-xr-x    3 jim     wheel   3 Apr  1 08:05 ./a/b
234527  1 drwxrwxr-x    3 jim     wheel   3 Apr  1 08:05 ./a/b/c
234528  1 drwx------    2 jim     wheel   2 Apr  1 08:05 ./a/b/c/d

Create Hierarchy仕様を使用して始めますmtree-dディレクトリのみが処理されることを示し、-c仕様を生成して標準出力に書き込むフラグで、-p amtreeに階層のルートディレクトリを知らせます。

$ mtree -dcp a > a.mtree

次に、階層を削除しaて空のディレクトリを再作成しますa

$ rm -rf a
$ mkdir a

最後に、以下のディレクトリ階層を再入力し、生成された初期a仕様で文書化された値にすべての権限を設定しますmtree。ここではフラグを省略します。-cなぜなら、私たちはそうではないからです。作る仕様は標準入力から読み取られ、ディスクの実際の階層と比較されます。 -t階層内のタイムスタンプを仕様の値に設定するために追加されました。

$ mtree -utp a < a.mtree 
.:      modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
b:      modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
b/c:    modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
b/c/d:  modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
$ find a -ls
235555  1 drwxr-xr-x   3 jim     wheel    3 Apr  1 08:05 a
194841  1 drwxr-xr-x   3 jim     wheel    3 Apr  1 08:05 a/b
194842  1 drwxrwxr-x   3 jim     wheel    3 Apr  1 08:05 a/b/c
194843  1 drwx------   2 jim     wheel    2 Apr  1 08:05 a/b/c/d

書き込みアクセス権があるがa/ルートの親ディレクトリがない場合は、代わりに下にディレクトリを作成a/できます。それ以外の場合は、同様の方法で続行してください。a.mtree/tmp

$ mtree -dcp a > /tmp/a.mtree
$ rm -rf a
rm: a: Permission denied

エラーメッセージにもかかわらず、それa/自体を除くすべてが消えた。

$ find a
a

したがって、書き込み権限がない場合は続行をa/..スキップできますmkdir a

$ mtree -utp a < /tmp/a.mtree 
.:      modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
b:      modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
b/c:    modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)
b/c/d:  modification time (Mon Apr  1 08:05:24 2024, Mon Apr  1 08:11:33 2024, modified)

おすすめ記事