"cp -as"を使ってディレクトリをコピーしましたが、 "rm -rf"で作成されたディレクトリが元のディレクトリを削除できるので心配です。

ディレクトリをコピーしましたが、その中のファイルが削除されるのはcp -as /media/user/dir symlinks怖いです。rm -rf symlinks/media/user/dir

ディレクトリ構造とシンボリックリンクのみを削除する安全な方法は何ですかsymlinks いいえ何でも触れますか/media/user/dir

テストで次のようにしました。

$ mkdir test
$ touch test/file
$ mkdir test/dir
$ touch test/dir/file2
$ cp -as test syms
$ rm -rf syms         

このテストでは元のディレクトリに触れませんでした test。これは完全なテストですか?いつもこんな感じですか?

バックアップするスペースがありません。/media/user/dir

ベストアンサー1

元のファイルも削除されることを心配することなく、シンボリックリンクを含むディレクトリを削除できます。

rmこのユーティリティのPOSIX仕様(シンボリックリンクに会ったときに何が起こるのか):

ユーティリティrmはシンボリックリンクに沿って階層の他の部分にディレクトリを移動しないでくださいが、リンク自体を削除する必要があります。

次に、後で(理由セクションで):

説明によると、rm機能に依存するため、ユーティリティは参照するファイルではなくシンボリックリンク自体を削除します。階層をunlink()使用-rまたは削除するときは、-R次のシンボリックリンクを明示的に禁止する必要があります。

GNUrmマニュアルはこれについて何も言わないが、この点でPOSIXに違反しないと仮定しなければならない。他のシステムのマニュアルには、この約束が明示的に含まれています。これはOpenBSDから(FreeBSDとNetBSDは同じ表現を使用します):

このrmユーティリティは、リンクが参照するファイルではなくシンボリックリンクを削除します。

...そしてAIXでは(Solarisにも同様の書き方があります):

ファイルがシンボリックリンクの場合、リンクは削除されますが、シンボリックリンクが参照するファイルまたはディレクトリはそのまま残ります。

rmシンボリックリンクに関連する動作は、ローカルで簡単にテストできます。

$ touch file
$ ls -l
total 0
-rw-r--r--  1 myself  wheel  0 Feb 26 09:32 file
$ ln -s file link
$ ls -l link
lrwxr-xr-x  1 myself  wheel  4 Feb 26 09:32 link -> file
$ rm link
$ ls -l
total 0
-rw-r--r--  1 myself  wheel  0 Feb 26 09:32 file

ディレクトリのシンボリックリンクを使用して同様の練習を実行できます。

おすすめ記事