sed -iがシンボリックリンクを破るのを防ぐ方法は?

sed -iがシンボリックリンクを破るのを防ぐ方法は?

sed -iシンボリックリンクで実行すると、リンクが壊れてオブジェクトファイルに置き換えられるのはなぜですか?この状況を避ける方法は?

例えば。

$ ls -l pet*
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:46 pet
lrwxrwxrwx 1 madneon madneon 6 mar 23 16:48 pet_link -> pet

$ sed -i 's/cat/dog/' pet_link

$ ls -l pet*
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:48 pet
-rw-rw-r-- 1 madneon madneon 4 mar 23 16:49 pet_link

なぜエラーと見なされないのですか?

ベストアンサー1

-i/flag--in-placeファイルを所定の位置に編集します。デフォルトでは、指定さsedれたファイルを読み込み、そのファイルの処理内容を一時ファイルに出力し、元のファイルがシンボリックリンクであることを確認せずに、元のファイルの上に一時ファイルをコピーします。

GNUには必要に応じて動作させるフラグがsedあります。--follow-symlinks

$ echo "cat" > pet
$ ln --symbolic pet pet_link
$ sed --in-place --follow-symlinks 's/cat/dog/' pet_link
$ cat pet
dog

おすすめ記事